题目链接:https://leetcode.cn/problems/implement-queue-using-stacks/description/
题目解析:
1. 队列的特性
队列是 先进先出(FIFO) 的,比如排队买奶茶,先来的人先拿到奶茶。
但栈是 后进先出(LIFO) 的,就像一摞盘子,最后放上去的盘子会被最先拿走。
问题:如何用两个栈(后进先出)模拟一个队列(先进先出)?
2. MyQueue 的设计思路
用两个栈:
stack_in:专门用来 入队(push),新来的元素直接压入这个栈。stack_out:专门用来 出队(pop),如果这个栈空了,就把stack_in的所有元素倒过来。
class MyQueue:
def __init__(self):
self.stack_in = []
self.stack_out = []
def push(self, x: int) -> None:
self.stack_in.append(x)
def pop(self) -> int:
if self.empty():
return None
if self.stack_out:
return self.stack_out.pop()
else:
for i in range(len(self.stack_in)):
self.stack_out.append(self.stack_in.pop())
return self.stack_out.pop()
def peek(self) -> int:
ans = self.pop() #def pop(self) -> int
self.stack_out.append(ans) #弹出去后又加回来
return ans
def empty(self) -> bool:
return not (self.stack_in or self.stack_out)