232 用栈实现队列
题目 232 用栈实现队列
思路
使用栈来模式队列的行为,如果仅仅用一个栈,是一定不行的,所以需要两个栈一个输入栈,一个输出栈,这里要注意输入栈和输出栈的关系。
注意:判断队列是否为空,只有输入栈和输出栈同时为空时队列才为空
代码
class MyQueue:
def __init__(self):
self.stackin = []
self.stackout = []
def push(self, x: int) -> None:
self.stackin.append(x)
def pop(self) -> int:
if self.empty(): # 先判断是否为空,为空返回None,不为空了再做pop操作
return None
if self.stackout: # 判断out是否有元素
return self.stackout.pop()
else: # 如果out没有元素,则把in里所有的元素都添加到out中
while self.stackin:
self.stackout.append(self.stackin.pop())
return self.stackout.pop()
def peek(self) -> int:
res = self.pop()
self.stackout.append(res)
return res
def empty(self) -> bool:
# 只要in或者out都有元素就说明栈不为空
# return not (self.stackin or self.stackout) # 正确的
# return self.stackin is None and self.stackout is None # 错误的,[],None是fasle,但是[]不等于None
return self.stackin == [] and self.stackout == []