📅  最后修改于: 2023-12-03 14:54:57.319000             🧑  作者: Mango
本文介绍了如何在循环链表中删除中间节点的示例代码。循环链表是一种特殊类型的链表,其中最后一个节点链接到第一个节点,形成一个循环。删除循环链表中的中间节点可以通过改变节点的指针来实现。
下面是一个示例函数,用于删除循环链表中的中间节点。
def delete_middle_node(node):
slow_ptr = fast_ptr = node
prev = None
if node is None:
return
while fast_ptr and fast_ptr.next:
fast_ptr = fast_ptr.next.next
prev = slow_ptr
slow_ptr = slow_ptr.next
if fast_ptr == node:
break
prev.next = slow_ptr.next
slow_ptr = None
fast_ptr
和 slow_ptr
,初始都指向循环链表的头节点 node
。fast_ptr
每次移动两步,慢指针 slow_ptr
每次移动一步。因为链表是循环的,所以快指针能够在慢指针遍历完链表一周之前追上慢指针。prev
。prev
的 next
指针指向慢指针的下一个节点,同时将慢指针置为 None
。调用以上函数的示例代码如下:
# 创建循环链表
class Node:
def __init__(self, data):
self.data = data
self.next = None
# 创建链表节点
n1 = Node(1)
n2 = Node(2)
n3 = Node(3)
n4 = Node(4)
# 构建循环链表
n1.next = n2
n2.next = n3
n3.next = n4
n4.next = n1
# 删除中间节点
delete_middle_node(n3)
# 打印链表
current = n1
while current.next != n1:
print(current.data, "->", end=" ")
current = current.next
print(current.data)
上述示例代码的运行结果将打印出 1 -> 2 -> 4
,中间节点 3
已被成功删除。
本文介绍了如何在循环链表中删除中间节点的示例代码。通过维护两个指针,快指针和慢指针,可以找到中间节点,并进行删除操作。要注意在循环链表中删除节点时,需要正确改变节点的指针来维护链表的连续性。