232.用栈实现队列
题目链接
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
视频讲解
栈的基本操作! | LeetCode:232.用栈实现队列_哔哩哔哩_bilibili
笔记
- 用两个队列分别扮演负责入队的栈和负责出队的栈
- 入队操作直接将元素加入负责扮演入队栈的数组,出队操作先判断负责扮演出队栈的数组是否为空,不为空可直接对数组pop(),为空时需要先将扮演入队栈数组中的元素全部移到出队栈的数组后再进行数组的pop()
- Python数组自带的pop()方法默认移除并返回最后一个元素,出栈操作可以调用该方法进行辅助
- 返回队首元素的peek()可以复用pop()方法的代码,因此可以直接调用pop(),但要记得把元素添加回负责出队栈的数组
Python代码
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:
# 若队列为空,返回None
if self.empty():
return None
# 出队时首先看负责出队的栈是否为空,若不为空直接出队
# 列表自带的pop()方法移除列表最后一个元素并返回该元素的值
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:
# 只返回队首的元素,不做移除操作
# 用栈模拟的时候调用pop()方法之后还要记得把元素添加到负责出队的栈里,注意不能直接调用push()
# 因为调用push()是把元素添加到负责入队的栈里
res = self.pop()
self.stack_out.append(res)
return res
def empty(self) -> bool:
# 若负责入队和出队的栈都为空,则说明队列为空,反之不为空
if len(self.stack_in) > 0 or len(self.stack_out) > 0:
return False
else:
return True
225. 用队列实现栈
题目链接
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
视频讲解
队列的基本操作! | LeetCode:225. 用队列实现栈_哔哩哔哩_bilibili
笔记
- 用一个数组即可模拟一个栈,借用数组的pop()方法移除并返回最后一个元素,appen()方法在末尾添加元素
Python代码
class MyStack:
def __init__(self):
self.que = []
def push(self, x: int) -> None:
self.que.append(x)
def pop(self) -> int:
if not self.empty():
return self.que.pop()
else:
return None
def top(self) -> int:
if not self.empty():
tmp = self.que.pop()
self.que.append(tmp)
return tmp
else:
return None
def empty(self) -> bool:
if self.que:
return False
else:
return True