题目链接:https://leetcode-cn.com/problems/implement-queue-using-stacks/
难度:简单

描述:
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(pushpoppeekempty):
实现MyQueue类:

  • void push(int x)将元素x推到队列的末尾
  • int pop()从队列的开头移除并返回元素
  • int peek()返回队列开头的元素
  • boolean empty()如果队列为空,返回true;否则,返回false

题解

思路:
维护两个栈stk_instk_out
push(x):直接将x推入stk_in
pop():当stk_out非空时,直接从stk_out弹出并返回元素,否则将stk_in中的元素依次弹出并pushstk_out中。
peek():若stk_out非空,返回stk_out顶部元素,否则返回stk_in底部元素
empty():判断stk_instk_out是否同时为空。

  1. class MyQueue:
  2. def __init__(self):
  3. self.stk_in = []
  4. self.stk_out = []
  5. def push(self, x: int) -> None:
  6. self.stk_in.append(x)
  7. def pop(self) -> int:
  8. if self.stk_out == []:
  9. while self.stk_in:
  10. self.stk_out.append(self.stk_in.pop())
  11. return self.stk_out.pop()
  12. def peek(self) -> int:
  13. if self.stk_out:
  14. return self.stk_out[-1]
  15. else:
  16. return self.stk_in[0]
  17. def empty(self) -> bool:
  18. return self.stk_in == [] and self.stk_out == []