题目
用两个栈来实现一个队列,完成队列的 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 xxif not self._stack1 and not self._stack2:return Noneif not self._stack2: # 当 stack2 为空时,将 stack1 弹出压入 stack2while self._stack1:self._stack2.append(self._stack1.pop(-1))return self._stack2.pop(-1)
