题解 | #用两个栈实现队列#
用两个栈实现队列
https://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.stack1 = []
self.stack2 = []
def push(self, node):
if len(self.stack2) > 0:
self.stack1.append(self.stack2.pop(-1))
self.stack1.append(node)
def pop(self):
if len(self.stack1) == 0 and len(self.stack2) == 0:
print("Your stack is empty!")
return None
elif len(self.stack1) > 0:
for _ in range(len(self.stack1)):
self.stack2.append(self.stack1.pop(-1))
return self.stack2.pop(-1)
stack1用来正常插入元素,stack2作为辅助,帮助弹出现存元素中第一个进栈的元素。
push时,先检查stack2中是否为空,不为空需要将元素按照栈的方式重新装入stack1,装入后还是原来的顺序不变。然后再插入新元素,因为新元素要最后一个进栈。
pop时,先检查stack1和stack2是否都为空,为空则报错。如果stack1中不为空,则按照栈的操作一个一个弹出stack1的元素装入stack2,最后弹出stack2最后装入的元素,即为所封装的队列的第一个元素。


