前往此题
解题思路
- 栈与队列的区别在于: 前者是先进后出,后者是先进先出。
- 如果用单个栈无法实现队列的功能,队首元素无法被栈直接删除,需要将所有上方元素出栈。
- 也就是说在出队(出栈)功能上,栈与队列中的元素是相反的。
比如栈 A = [1, 2, 3]
, 队列 B = [3, 2, 1]
。A出栈意味着将**[3]出栈, B 出队也就是将[3]出队,加下来的出队(出栈)对象是[2]**。
- 通过双栈A, B , 对其中一个栈执行倒序来实现队列的出队功能,另外一个栈负责存储数据。
函数逻辑
- 设计两个栈A, B
- A负责存储入队的数据, B负责依序出队
- 入队:直接将数据如栈A
- 出队有三种情况:
- 当栈A, B为空的时候代表队列为空,返回**-1**
2. 当栈A为空, 栈B不为空的时候,栈B出栈并返回栈顶元素
3. 当栈B为空,栈A不为空的时候,将栈A所有元素倒序后放入栈B并出栈返回栈顶元素
代码
class CQueue:
def __init__(self):
self.A, self.B = [],[]
def appendTail(self, value: int) -> None:
self.A.append(value)
def deleteHead(self) -> int:
if self.B: return self.B.pop()
if not self.A: return -1
while self.A:
self.B.append(self.A.pop())
return self.B.pop()