Leetcode 225. 用队列实现栈
请你仅使用两个队列实现一个后入先出(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(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。
解题思路:
当使用两个队列实现栈时,主要的思路是在 push 操作中将新元素放在队列的头部,以实现后入先出(LIFO)的特性。以下是详细的解题思路:
- 定义两个队列
queue1
和queue2
,其中queue1
是主队列用于存储栈中的元素,queue2
是辅助队列用于在 push 操作中临时存储元素。 - 在构造函数
MyStack()
中,初始化两个队列,即queue1
和queue2
。 - 在
push
操作中,首先将queue1
中的所有元素移到queue2
,以保证新元素可以添加到队列的头部。然后将新元素x
添加到queue1
。最后,将queue2
中的所有元素移回queue1
,确保栈中的元素顺序不变。 - 在
pop
操作中,直接从queue1
中移除并返回头部元素,即栈顶元素。 - 在
top
操作中,返回queue1
的头部元素,即栈顶元素。 - 在
empty
操作中,判断queue1
和queue2
是否都为空。如果两个队列都为空,说明栈中没有元素,返回 true;否则,返回 false。
评论区