题目链接:https://leetcode-cn.com/problems/implement-queue-using-stacks/
难度:简单
描述:
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push
、pop
、peek
、empty
):
实现MyQueue
类:
void push(int x)
将元素x
推到队列的末尾int pop()
从队列的开头移除并返回元素int peek()
返回队列开头的元素boolean empty()
如果队列为空,返回true
;否则,返回false
题解
思路:
维护两个栈stk_in
与stk_out
。push(x)
:直接将x
推入stk_in
中pop()
:当stk_out
非空时,直接从stk_out
弹出并返回元素,否则将stk_in
中的元素依次弹出并push
到stk_out
中。peek()
:若stk_out
非空,返回stk_out
顶部元素,否则返回stk_in
底部元素empty()
:判断stk_in
与stk_out
是否同时为空。
class MyQueue:
def __init__(self):
self.stk_in = []
self.stk_out = []
def push(self, x: int) -> None:
self.stk_in.append(x)
def pop(self) -> int:
if self.stk_out == []:
while self.stk_in:
self.stk_out.append(self.stk_in.pop())
return self.stk_out.pop()
def peek(self) -> int:
if self.stk_out:
return self.stk_out[-1]
else:
return self.stk_in[0]
def empty(self) -> bool:
return self.stk_in == [] and self.stk_out == []