题目链接
    请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。

    实现 MyStack 类:

    • void push(int x) 将元素 x 压入栈顶。
    • int pop() 移除并返回栈顶元素。
    • int top() 返回栈顶元素。
    • boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。


      注意:

    • 你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 这些操作。

    • 你所使用的语言也许不支持队列。 你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。

    示例:

    1. 输入:
    2. ["MyStack", "push", "push", "top", "pop", "empty"]
    3. [[], [1], [2], [], [], []]
    4. 输出:
    5. [null, null, null, 2, 2, false]
    6. 解释:
    7. MyStack myStack = new MyStack();
    8. myStack.push(1);
    9. myStack.push(2);
    10. myStack.top(); // 返回 2
    11. myStack.pop(); // 返回 2
    12. myStack.empty(); // 返回 False

    提示:

    • 1 <= x <= 9
    • 最多调用100 次 push、pop、top 和 empty
    • 每次调用 pop 和 top 都保证栈不为空
    class MyStack {
    
        Queue<Integer> queue1;
        Queue<Integer> queue2; // 辅助队列,用于备份数据
    
        public MyStack() {
            queue1 = new LinkedList<>();
            queue2 = new LinkedList<>();
        }
    
        // 将元素 x 压入栈顶
        public void push(int x) {
            queue2.offer(x); // 先放在辅助队列中 offer()将指定的元素添加为LinkedList的最后一个元素
            while (!queue1.isEmpty()) {
                queue2.offer(queue1.poll()); // poll() 返回此列表的头元素
                // 把queue1中的元素放入queue2
            }
            Queue<Integer> queueTemp;
            queueTemp = queue1;
            queue1 = queue2;
            queue2 = queueTemp; // 最后交换queue1和queue2,将元素都放到queue1中
        }
    
        // 移除并返回栈顶元素
        public int pop() {
            return queue1.poll(); // 因为queue1中的元素和栈中的保持一致,所以这个和下面两个的操作只看queue1即可
        }
    
        // 返回栈顶元素
        public int top() {
            return queue1.peek();
        }
    
        // 如果栈是空的,返回 true ;否则,返回 false
        public boolean empty() {
            return queue1.isEmpty();
        }
    }
    
    /**
    * Your MyStack object will be instantiated and called as such:
    * MyStack obj = new MyStack();
    * obj.push(x);
    * int param_2 = obj.pop();
    * int param_3 = obj.top();
    * boolean param_4 = obj.empty();
     */