剑指offer用两个栈实现队列python
Posted 小小文艺范
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer用两个栈实现队列python相关的知识,希望对你有一定的参考价值。
题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
思路
定义两个栈stack1,stack2,stack1负责存数据,stack2负责辅助完成队列的弹出。stack1维持一个队列的顺序,stack1栈底数据是最先压入的,弹出的时候,应该是最先被弹出的。我们弹出的时候,把stack1栈顶数据依次压入stack2,这样的话,最先在stack1栈底的数据会到stack2的栈顶,用stack2的pop方法自然就弹出该数据。只是要注意,弹出之后,为了防止新进入stack1的元素再压入stack2到stack2表面,破坏了队列的顺序,每一次stack2弹出栈顶元素后,需要再把stack2的元素重新压回到stack1里面。
push操作:按栈存储压入stack1
pop操作:如果stack1为空,错误
stack1不为空,将stack1全部压入stack2,再用pop方法弹出,再把stack2全部压入stack1
代码
# -*- coding:utf-8 -*- class Solution: def __init__(self): self.stack1 = [] self.stack2 = [] def push(self, node): self.stack1.append(node) def pop(self): if self.stack1 is None: return None while self.stack1: self.stack2.append(self.stack1.pop()) temp = self.stack2.pop() while self.stack2: self.stack1.append(self.stack2.pop()) return temp
以上是关于剑指offer用两个栈实现队列python的主要内容,如果未能解决你的问题,请参考以下文章