首先核心是要理解
什么是栈(stack)
什么是队列 (queue)
栈的的话,堆叠之意,所以都是从顶部拿出来的,在上面的后进来,但是会先出去。
队列,排过队都知道,先到先得,所以排第一位的肯定先走
两个的话,栈构成队列的话。要把握核心我们是要做一个队列,所以push进去的,和pop出来就不应该一样的,不是你push了啥就先出来啥,那么就是栈了。
如果用python实现的话,我们会使用list。重点的地方出来了,list其实和栈很像,所以我们用了list 其实已经有了栈的push 和pop了。
list.pop()#先进后出的效果
那么实现代码如下:
首先先给这个队列的函数,定义两个list 也就是两个栈的意思,然后push的话刚刚说了栈的push 和list 的很像所以直接用了append。那么一个是栈是用来进来的。另一个栈是用来出来的。这样可以构成队列的功能。一个栈用来进来,另一个栈用来将这个栈的输出作为输入,这样顶部的就会被放到最下面。然后我们再输出,这样刚刚那个栈的底部的就会跑到顶部。 但是要注意一个点:如果pop的时候里面有东西的话,我们是不能往里面加的,这样会导致这个作为队列pop的功能的栈,先进后出了,所以我们要做个判断,再pop之前先看看是否为空,如果不为空先把里面的pop出来,如果为空了我们再添加,然后添加前先看看之前的是否为空。
class Solution:
def __init__(self):
self.stack1=[]
self.stack2=[]
def push(self, node):
# write code here
self.stack1.append(node)
def pop(self):
if self.stack2==[]: #使用pop前看看是否为空,不为空就直接pop出来
while self.stack1: #如果为空就将刚刚stack1里面的先push进来,全部都push进来,然后再pop出去。
return self.stack2.pop()
return self.stack2.pop()