题目链接:https://leetcode.cn/problems/implement-queue-using-stacks/description/

题目解析:

1. 队列的特性

队列是 先进先出(FIFO) 的,比如排队买奶茶,先来的人先拿到奶茶。
但栈是 后进先出(LIFO) 的,就像一摞盘子,最后放上去的盘子会被最先拿走。

问题:如何用两个栈(后进先出)模拟一个队列(先进先出)?

2. MyQueue 的设计思路

用两个栈:

  • stack_in:专门用来 入队(push),新来的元素直接压入这个栈。

  • stack_out:专门用来 出队(pop),如果这个栈空了,就把 stack_in 的所有元素倒过来。

class MyQueue:

    def __init__(self):
        self.stack_in = []
        self.stack_out = []


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

    def pop(self) -> int:
        if self.empty():
            return None
        
        if self.stack_out:
            return self.stack_out.pop()
        else:
            for i in range(len(self.stack_in)):
                self.stack_out.append(self.stack_in.pop())
            return self.stack_out.pop()
        

    def peek(self) -> int:
        ans = self.pop() #def pop(self) -> int
        self.stack_out.append(ans) #弹出去后又加回来
        return ans

    def empty(self) -> bool:
        return not (self.stack_in or self.stack_out)