Loading... # [232. 用栈实现队列](https://leetcode.cn/problems/implement-queue-using-stacks/) ## 题目 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(`push`、`pop`、`peek`、`empty`): 实现 `MyQueue` 类: - `void push(int x)` 将元素 x 推到队列的末尾 - `int pop()` 从队列的开头移除并返回元素 - `int peek()` 返回队列开头的元素 - `boolean empty()` 如果队列为空,返回 `true` ;否则,返回 `false` **说明:** - 你 **只能** 使用标准的栈操作 —— 也就是只有 `push to top`, `peek/pop from top`, `size`, 和 `is empty` 操作是合法的。 - 你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。 **示例 1:** ``` 输入: ["MyQueue", "push", "push", "peek", "pop", "empty"] [[], [1], [2], [], [], []] 输出: [null, null, null, 1, 1, false] 解释: MyQueue myQueue = new MyQueue(); myQueue.push(1); // queue is: [1] myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue) myQueue.peek(); // return 1 myQueue.pop(); // return 1, queue is [2] myQueue.empty(); // return false ``` **提示:** - `1 <= x <= 9` - 最多调用 `100` 次 `push`、`pop`、`peek` 和 `empty` - 假设所有操作都是有效的 (例如,一个空的队列不会调用 `pop` 或者 `peek` 操作) **进阶:** - 你能否实现每个操作均摊时间复杂度为 `O(1)` 的队列?换句话说,执行 `n` 个操作的总时间复杂度为 `O(n)` ,即使其中一个操作可能花费较长时间。 ## 思路 可使用一个栈作为压入栈,一个作为弹出栈,称为 pushStack,在弹出数据时只从这个栈弹出,称为 popStack. 1. 如果 pushStack 要向 popStack 压入数据,则必须一次全部压入。 2. 如果 popStack 不为空,pushStack 决不能向 popStack 压入数据。 违反上述两点就会出错。 ## 题解 ```java import java.util.Stack; class MyQueue { private Stack<Integer> pushStack; private Stack<Integer> popStack; public MyQueue() { pushStack = new Stack<>(); popStack = new Stack<>(); } public void push(int x) { pushStack.push(x); } public int pop() { peek(); return popStack.pop(); } public int peek() { if (popStack.isEmpty()) { while (!pushStack.isEmpty()) { popStack.push(pushStack.pop()); } } return popStack.peek(); } public boolean empty() { return popStack.isEmpty() && pushStack.isEmpty(); } } /** * Your MyQueue object will be instantiated and called as such: * MyQueue obj = new MyQueue(); * obj.push(x); * int param_2 = obj.pop(); * int param_3 = obj.peek(); * boolean param_4 = obj.empty(); */ //leetcode submit region end(Prohibit modification and deletion) ``` 最后修改:2022 年 09 月 24 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请我喝杯咖啡吧。