题目解析
队列的特点是先进先出,其实和单链表的结构类似。我们只需要实现队列的基本功能即可。
- 定义队列
class LinkedListQueue:
def __init__(self):
# 初始化队列的头尾指针和大小
self.head = None # 队列头部节点
self.tail = None # 队列尾部节点
self.size = 0 # 队列中元素的数量
- 判空
def is_empty(self):
"""检查队列是否为空"""
return self.size == 0
- 查看当前有多少元素
def get_size(self):
"""返回队列中元素的数量"""
return self.size
- 入栈
def offer(self, value):
"""向队列尾部添加元素"""
# 创建新节点
node = ListNode(value)
if self.is_empty():
# 如果队列为空,新节点同时成为头尾节点
self.head = node
self.tail = node
self.size += 1
else:
# 如果队列不为空,将新节点链接到尾部,并更新尾指针
self.tail.next = node
self.tail = node
self.size += 1
return self # 支持链式调用
- 查看head元素
def peek(self):
"""查看队列头部元素但不移除"""
if self.is_empty():
return None # 队列为空时返回None
else:
return self.head.val # 返回头部节点的值
- 处栈
def poll(self):
"""移除并返回队列头部元素"""
if self.is_empty():
raise Exception("Queue is empty") # 队列为空时抛出异常
# 保存头部节点的值
value = self.head.val
# 将头指针移动到下一个节点
self.head = self.head.next
self.size -= 1
# 重要:如果移除后队列为空,需要同时更新尾指针为None
# 防止tail指针悬空指向已移除的节点
if self.head is None:
self.tail = None
return value # 返回被移除的元素值