剑指offer-JZ5 用两个栈实现队列

难度:简单

知识点:栈

题目描述:

用两个栈来实现一个队列,分别完成在队列尾部插入整数(push)和在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。

 解题思路:

栈是先进后出,队列是先进先出。

所以,要想实现先进先出,则需要两个栈,从栈顶至栈底,依次把元素挪入另一个栈,此时原栈顶变为栈底,原栈底变为栈顶,再对第二个栈进行存取,也就相当于实现了队列的先进先出功能。

class Solution:
    def __init__(self):
        self.acceptStack = []
        self.outputStack = []
    def push(self, node):
        self.acceptStack.append(node)
        # write code here
    def pop(self):
        if not self.outputStack:  # A中包含元素,B中包含元素,此时需要逐个转移
            while self.acceptStack:
                self.outputStack.append(self.acceptStack.pop())
        if self.outputStack:  # 判断,不为空的时候,返回
            return self.outputStack.pop()
        else: # A、B中都不包含元素
            return None
        # return xx

时间复杂度和空间复杂度都是O(n)

posted @ 2021-07-15 21:51  LLLLgR  阅读(38)  评论(0编辑  收藏  举报