跳到主要内容

面试题09. 用两个栈实现一个队列

题目描述

做题链接:面试题09. 用两个栈实现一个队列

解题思路

栈是后进先出(LIFO),队列是先进先出(FIFO)

  • 可以使用2个栈来表示,一个表示入栈,还有一个表示出栈,出栈的顺序与入栈顺序相反。
  • 第一个栈弹出后压入第二个栈就可以了

代码

class CQueue:

def __init__(self):
# s1 用于存储,相当于仓库; s2 用于输出
self.s1, self.s2 = [], []

def appendTail(self, value: int) -> None:
self.s1.append(value)

def deleteHead(self) -> int:
if self.s2: return self.s2.pop()
while self.s1: # 如果 s1 为空,尝试把 s2 数据换过来
self.s2.append(self.s1.pop())
if self.s2: return self.s2.pop() # 再次尝试取数据
else: return -1