题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
思路:
栈:先进后出
队列:先进先出
-> 栈1用来存储入栈push()
-> 栈2用来删除出栈pop()
-> 只有栈2为空即所有数据全部调入栈1时可以push
-> 只有栈1中的数据全部逆序的调入栈2时可以pop
代码:
public class Offer0005 {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) throws EmptyStackException {
while (!stack2.empty()) {
// System.out.println(stack2.size()+": 2top = "+stack2.peek());
stack1.push(stack2.peek());
stack2.pop();
}
stack1.push(node);
}
public int pop() throws EmptyStackException {
while (!stack1.empty()) {
// System.out.println(stack1.size()+": 1top = "+stack1.peek());
stack2.push(stack1.peek());
stack1.pop();
}
// System.out.println("stack2.peek = "+stack2.peek());
if (stack2.empty()) return 0;
return stack2.pop();
}