博客1
博客2
预备知识
- 栈是先进后出,在栈顶进出元素
- 队列是先进先出,队尾入队,队头出队
- 入队:元素直接入栈1
- 出队:先将栈1的元素依次出栈插入栈2,然后栈2出栈
class Solution:
def __init__(self):
self.stack1 = []
self.stack2 = []
def push(self, node):
self.stack1.append(node)
def pop(self):
'''
如果栈2为空就代表没有进行过出队操作
所以需要把栈1里面的元素全部压入栈2中,进行模拟队的出队操作
'''
if not self.stack2:
while self.stack1:
self.stack2.append(self.stack1.pop())
'''
如果栈2不为空就代表之前的操作已经使用过出队操作,直接取出栈2的栈顶
元素就是当前出队的那个元素
'''
return self.stack2.pop()
实现思路
- 使用两个栈,栈1和栈2,栈1实现push操作,栈2实现pop操作
- 实现队列的push操作,将元素依次入栈
- 实现队列的pop操作
1) 首先判断栈2是否为空
若栈2为空,且栈1不为空:则将栈1的元素依次导入栈2,stack2.append(stack1.pop())
,然后执行pop操作,将队头的元素删除
若栈2为空,栈1为空:此时队列为空
2)栈2不为空,直接进行stack2.pop操作