栈的操作其实也队列的似乎没什么不同,总的来说有以下几个

  • 取:stack.pop();
  • 存:stack.push(obj);
  • 看:stack.peek();
  • 判断空:stack.isEmpty();

这个题的push方法的做法与用列队实现栈很相似,都是需要辅助栈来操作。
队列中新增的元素都是放在队尾,而栈新增的元素则是放在栈顶,要让栈与队列一样,能把元素放在“尾”的话,就要先清空原栈的元素,把新的元素放到栈底,再把清空的元素添加到栈中。

模拟一下添加元素【5】到队列中:
现队列:【4,3,2,1】,要添加【5】到队尾--->【5,4,3,2,1】
主栈:【4,3,2,1】
首先,把主栈的元素保存到辅助栈中,然后添加元素【5】到主栈中
主栈:【5】
辅助栈:【1,2,3,4】
然后,再把辅助栈的内容复制回主栈
主栈:【5,4,3,2,1】,完成。

class MyQueue {
    Stack<Integer> stack;
    Stack<Integer> helper;
    /** Initialize your data structure here. */
    public MyQueue() {
        stack = new Stack<>();
        helper = new Stack<>();
    }
    
    /** Push element x to the back of queue. */
    public void push(int x) {
        while(!stack.isEmpty()){
            helper.push(stack.pop());
        }
        stack.push(x);
        while(!helper.isEmpty()){
            stack.push(helper.pop());
        }
    }
    
    /** Removes the element from in front of queue and returns that element. */
    public int pop() {
        return stack.pop();
    }
    
    /** Get the front element. */
    public int peek() {
        return stack.peek();
    }
    
    /** Returns whether the queue is empty. */
    public boolean empty() {
        return stack.isEmpty();
    }
}