欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

剑指offer8:用两个栈实现队列

程序员文章站 2022-03-05 13:11:03
...

、使用两个栈,一个栈(stackPush)用于元素进栈,一个栈(stackPop)用于元素出栈;

2、pop() 或者 peek() 的时候:

(1)如果 stackPop 里面有元素,直接从 stackPop 里弹出或者 peek 元素;

(2)如果 stackPop 里面没有元素,一次性将 stackPush 里面的所有元素倒入 stackPop。

为此,可以写一个 shift 辅助方法,一次性将 stackPush 里的元素倒入 stackPop。

# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
    self.__stack1=[]
    self.__stack2=[]
    def push(self, node):
        # write code here
        self.__stack1.append(node)
            
    def pop(self):
        # return xx
        if self.__stack2:
            return self.__stack2.pop()
        else:
            if self.__stack1:
                while self.__stack1:
                    self.__stack2.append(self.__stack1.pop())
                return self.__stack2.pop()
            else:
                return None
    def peek(self):
        if not self.__stack2:
            while self.__stack1:
                self.__stack2.append(self.__stack1.pop())
        return self.__stack2[-1]