225. 用队列实现栈
这个题跟232. 用栈实现队列是类似的
思路:
根据题目要求,允许使用的方法:append、pop(0)
栈是先进后出(后进先出),队列是先进先出,想要用两个队列实现一个栈,需执行以下步骤
1. 将元素插入q1,q1=[1,2,3] q2=[]
2. q1执行n-1次pop(0) ,其中n代表q1的长度,将pop出来的方法放入q2 ,q1=[3] q2=[1,2]
3. 从q1 pop(0) 就得到元素3 ,q1=[] q2=[1,2]
4. 然后将q2的所有元素弹出到q1,q1=[1,2] q2=[]
class MyStack:
def __init__(self):
self.q1 = []
self.q2 = []
def push(self, x: int) -> None:
"""将元素 x 压入栈顶,pop的时候第一个弹出"""
self.q1.append(x)
def pop(self) -> int:
"""移除并返回栈顶元素"""
# 把q1的n-1个元素挪到q2
for _ in range(len(self.q1)-1):
self.q2.append(self.q1.pop(0))
# 从q1 pop(0) 的就是MyStack.pop要的结果
result = self.q1.pop(0)
# 把q2的所有元素挪到q1
for _ in range(len(self.q2)):
self.q1.append(self.q2.pop(0))
return result
def top(self) -> int:
"""返回栈顶元素, 只返回不pop"""
# 先pop后加回去
result = self.pop()
self.push(result)
return result
def empty(self) -> bool:
if not self.q1:
return True
return False