要检测链表中是否存在循环,可以使用Floyd's Tortoise and Hare算法。这个算法使用两个指针,一个快指针(每次移动两步)和一个慢指针(每次移动一步)。如果链表中存在循环,这两个指针最终会在某个节点相遇。
以下是一个用Python编写的检测链表循环的函数:
class ListNode:
def __init__(self, value):
self.value = value
self.next = None
def has_cycle(head):
if not head:
return False
slow = head
fast = head
while fast and fast.next:
slow = slow.next # 慢指针每次移动一步
fast = fast.next.next # 快指针每次移动两步
if slow == fast: # 如果两个指针相遇,说明存在循环
return True
return False # 如果快指针到达链表末尾,说明没有循环
next
指针指向链表中的一个先前节点,形成一个环。False
。fast
或fast.next
为None
),说明链表中没有循环。slow
和fast
都指向链表头。slow
每次移动一步,fast
每次移动两步。slow
和fast
相遇,说明存在循环,返回True
。fast
到达链表末尾,说明没有循环,返回False
。通过这种方式,可以有效地检测链表中是否存在循环。如果你的代码逻辑看起来正确但仍然找不到错误,请检查链表的构建过程是否正确,确保没有意外地创建了环。
领取专属 10元无门槛券
手把手带您无忧上云