题目
用两个栈来实现一个队列,完成队列的 Push 和 Pop 操作。 队列中的元素为 int 类型。
思路
使用两个栈(stack1、stack2)来实现一个队列,主要的思路是做数据的迁移,具体如下:
用stack1 来保存压入的数据,当要弹出时,将stack1 依次弹出放入 stack2 中,stack2 中栈顶的元素就是要弹出的元素
- 压入操作
- 当 stack2 为空时或者只有一个元素时,元素直接压入 stack1。原因是 stack2 只有一个元素时可以让下次的队列的弹出操作更方便
- 当stack2中的元素个数大于1时,将stack2中的元素依次弹出到stack1中,然后再执行压入操作
- 弹出操作
- 当 stack1 和 stack2 都为空时,此时不能弹出
- 当 stack2 为空时,将 stack1中的元素依次弹出压入到stack2中,然后弹出 stack2 中栈顶的元素
代码
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self._stack1 = []
self._stack2 = []
def push(self, node):
# write code here
# stack1 用来保存压入的数据
if len(self._stack2) == 1 or not self._stack2: # 当 stack2 为空或者长度为 1 时,压入的元素直接保存在 stack1 中
self._stack1.append(node)
else:
while len(self._stack2):
self._stack1.append(self._stack2.pop(-1))
def pop(self):
# return xx
if not self._stack1 and not self._stack2:
return None
if not self._stack2: # 当 stack2 为空时,将 stack1 弹出压入 stack2
while self._stack1:
self._stack2.append(self._stack1.pop(-1))
return self._stack2.pop(-1)