题目

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

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

思路

队列:先入先出
栈: 先入后出

核心在于每次新元素入队之后,要更改顺序。

  1. class MyStack:
  2. def __init__(self):
  3. """
  4. Initialize your data structure here.
  5. """
  6. self.queue1 = collections.deque() # 存储栈元素
  7. self.queue2 = collections.deque() # 用于入栈
  8. def push(self, x: int) -> None:
  9. """
  10. Push element x onto stack.
  11. """
  12. self.queue2.append(x)
  13. while self.queue1:
  14. # 让栈中的元素依次放在后面
  15. self.queue2.append(self.queue1.popleft())
  16. self.queue1, self.queue2 = self.queue2, self.queue1
  17. def pop(self) -> int:
  18. """
  19. Removes the element on top of the stack and returns that element.
  20. """
  21. return self.queue1.popleft()
  22. def top(self) -> int:
  23. """
  24. Get the top element.
  25. """
  26. return self.queue1[0]
  27. def empty(self) -> bool:
  28. """
  29. Returns whether the stack is empty.
  30. """
  31. return not self.queue1