232 用栈实现队列

题目 232 用栈实现队列

思路

使用栈来模式队列的行为,如果仅仅用一个栈,是一定不行的,所以需要两个栈一个输入栈,一个输出栈,这里要注意输入栈和输出栈的关系。

注意:判断队列是否为空,只有输入栈和输出栈同时为空时队列才为空

代码

class MyQueue:
    def __init__(self):
        self.stackin = []
        self.stackout = []

    def push(self, x: int) -> None:
        self.stackin.append(x)

    def pop(self) -> int:
        if self.empty():  # 先判断是否为空,为空返回None,不为空了再做pop操作
            return None

        if self.stackout:  # 判断out是否有元素
            return self.stackout.pop()
        else:  # 如果out没有元素,则把in里所有的元素都添加到out中
            while self.stackin:
                self.stackout.append(self.stackin.pop())
            return self.stackout.pop()

    def peek(self) -> int:
        res = self.pop()
        self.stackout.append(res)
        return res

    def empty(self) -> bool:
        # 只要in或者out都有元素就说明栈不为空
        # return not (self.stackin or self.stackout)  # 正确的
        # return self.stackin is None and self.stackout is None  # 错误的,[],None是fasle,但是[]不等于None
        return self.stackin == [] and self.stackout == []
posted @ 2022-09-05 09:51  时光如你般美好  阅读(13)  评论(0编辑  收藏  举报