xiaomi

个人博客

小米的个人博客,欢迎交流


每天一道剑指Offer:用两个栈实现队列


题目描述: 用两个栈来实现一个队列,完成队列的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();
    }