实现链表的反转
#反转
def reverse(self):
prev = None
current = self.head
while current:
"""
prev:前一个节点(初始为 None)
current:当前节点(初始为 head)
next_node:临时保存当前节点的下一个节点(防止丢失)
"""
# 保存后继节点,防止修改指针后丢失后续节点。
next_node = current.next
# 将当前节点的 next 指向前驱节点。
current.next = prev
# prev 和 current 分别后移一步
prev = current # 前驱变为当前节点
current = next_node #当前节点后移
self.head = prev # 最后更新头节点
合并两个有序链表
#合并两个有序链表
def merge_sorted_lists(self, listsec):
merged = LinkList()
l1 = self.head
l2 = listsec.head
# 处理空链表的情况
if l1 is None and l2 is None:
return merged
elif l1 is None:
merged.head = l2
merged.size = listsec.size
return merged
elif l2 is None:
merged.head = l1
merged.size = self.size
return merged
# 确定合并后的头节点
if l1.value <= l2.value:
merged.head = l1
current = l1
l1 = l1.next
else:
merged.head = l2
current = l2
l2 = l2.next
# 遍历两个链表,连接节点
while l1 and l2:
if l1.value <= l2.value:
current.next = l1
l1 = l1.next
else:
current.next = l2
l2 = l2.next
current = current.next
# 处理剩余节点
if l1:
current.next = l1
else:
current.next = l2
# 计算合并后的size
merged.size = self.size + listsec.size
return merged