用两个栈实现一个队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.stack1 = []
self.stack2 = []
def push(self, node):
self.stack1.append(node)
def pop(self):
# 在stack2清空之前,不再向其中append
if len(self.stack2) != 0:
return self.stack2.pop()
# 如果stack2清空,那么把stack1中的所有数据倒进stack2中
while len(self.stack1) != 0:
self.stack2.append(self.stack1.pop())
return self.stack2.pop()
题解:
如果有一个盒子stack1装着米,上面的米新,下面的米旧,我想先吃旧米该怎么办?把全部的米倒入另一个盒子stack2中,新米就跑到下面了,旧米就跑到上面了。
另外一个注意点是,在stack2清空之前,不再向其中倒入新的米,因为此时stack2的米相对于stack1整体是旧米,而且是排序好的。只有当stack2中的米被吃完之后,再将stack1中的米全部倒入stack2中