leetcode 225.用队列实现栈

86 阅读1分钟

225.用队列实现栈

使用队列实现栈的下列操作:

  • push(x) -- 元素 x 入栈
  • pop() -- 移除栈顶元素
  • top() -- 获取栈顶元素
  • empty() -- 返回栈是否为空

注意:

  • 你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。
  • 你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。
  • 你可以假设所有操作都是有效的(例如, 对一个空的栈不会调用 pop 或者 top 操作)。
from collections import deque


class MyStack(object):
    def __init__(self):
        self.queue = deque([])

    def push(self, x: int) -> None:
        self.queue.append(x)
        for _ in range(0, len(self.queue) - 1):  # push后,把队列的顺序反转过来
            self.queue.append(self.queue.popleft())

    def pop(self) -> int:  # 最后一个压入的元素(栈顶)永远在 queue 的前端
        return self.queue.popleft()

    def top(self) -> int:  # 栈顶元素永远在 queue 的前端
        return self.queue[0]

    def empty(self) -> bool:
        return not self.queue

# push:当我们将一个元素从队列入队的时候,这个元素会存在队列的后端。
# 但当实现一个栈时,最后入队的元素(栈顶)应该在前端。
# 为了实现这个目的,每当入队一个新元素的时候,我们可以把队列的顺序反转过来。