解题思路:
Note(1)试试instack和outstack可以同时存放元素,也就是Note(1)部分哟,这样不需要每次push都傻傻的倒一次哟
Note(2)巧用python list的append和pop
class MyQueue:
def __init__(self):
self.instack = [] # 入元素的栈
self.outstack = [] # 出元素的栈
# 元素可以不全部在instack或者outstack里边
def push(self, x: int) -> None:
# Note(1)如果instack里边有元素,那么先把instack的元素放到outstack里边
while self.instack != []:
self.outstack.append(self.instack.pop()) # Note(2)
# 此时instack空了,放入x
self.instack.append(x)
def pop(self) -> int:
# Note(1)如果outstack里边有元素,那么先把outstack的元素放到instack里边
while self.outstack != []:
self.instack.append(self.outstack.pop()) # Note(2)
# 此时outstack空了,弹出instack的栈顶
x = self.instack.pop()
return x
def peek(self) -> int:
# Note(1)如果outstack里边有元素,那么先把outstack的元素放到instack里边
while self.outstack != []:
self.instack.append(self.outstack.pop()) # Note(2)
# 此时outstack空了,返回instack的栈顶元素
x = self.instack[-1]
return x
def empty(self) -> bool:
# Note(1)由于instack和outstack都可能有元素,所以两个栈都要判断是否是空的
if self.instack==[] and self.outstack==[]:
return True
else:
return False
# Your MyQueue object will be instantiated and called as such:
# obj = MyQueue()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.peek()
# param_4 = obj.empty()