栈与队列
offer08要求用两个栈实现队列的进与出的功能。这里涉及到两个概念:栈与队列。尽管栈还要分为堆栈链栈之类的结构,但是往简单里说,这两者的区别在于:栈是先进后出,队列是先进先出,栈相当于有一个封底。
两个栈实现队列
对于进队列功能,我们直接用进A栈来解决。对于出队列功能,我们可以将A栈的元素全部压进到B栈,然后再从B栈弹出元素即可。细节方面,如果B栈之前还有元素,要先全部弹出。
class Solution:
def __init__(self):
self.stackA=[]
self.stackB=[]
# offer08-solution
def push(self, node):
self.stackA.append(node) # 进队列:直接进入栈A
def pop(self): # 出队列:如果B中还没出完,先出清B,清空后将A的元素压进B,再弹出
if self.stackB:
return self.stackB.pop()
elif not self.stackA:
return None
else:
while self.stackA:
self.stackB.append(self.stackA.pop())
return self.stackB.pop()