更新时间:2024-02-02 来源:黑马程序员 浏览量:

判断单向链表中是否存在环可以使用快慢指针的方法。这种方法非常有效,而且只需要常数的额外空间。以下是详细的说明:
初始化两个指针,一个称为快指针(fast),另一个称为慢指针(slow),初始时都指向链表的头部。
快指针每次向前移动两步,慢指针每次向前移动一步。

如果存在环,快指针最终会追上慢指针,形成一个循环。如果没有环,快指针将会先到达链表的末尾。
下面是算法的具体步骤:
class ListNode: def __init__(self, value): self.value = value self.next = None def has_cycle(head): # 初始化快慢指针 slow = head fast = head # 遍历链表 while fast is not None and fast.next is not None: # 移动慢指针一步 slow = slow.next # 移动快指针两步 fast = fast.next.next # 检测是否相遇,即是否存在环 if slow == fast: return True # 如果快指针到达链表末尾,说明没有环 return False
这个算法的关键在于快指针每次走两步,而慢指针每次走一步。如果存在环,快指针最终会在某一时刻与慢指针相遇。如果没有环,快指针会先到达链表的末尾。
这个方法的时间复杂度是O(N),其中N是链表的长度,因为在最坏情况下,快指针需要遍历整个链表。空间复杂度是 O(1),因为只使用了两个指针。
AI鸿蒙原生智能正式版课程,培养全端跨平台鸿蒙工程师
2026-03-10AI鸿蒙原生智能正式版课程,培养全端跨平台鸿蒙工程师
2026-03-10毕业16个工作日,平均薪资13180元,就业率100%,广州黑马AI智能应用开发(Java)学科20250529班
2026-03-06毕业32个工作日,平均薪资11147元,就业率95%,广州黑马AI智能应用开发(Java)学科20250326班
2026-03-05黑马程序员2025全国就业数据发布:全学科平均就业率92.07%,AI开发类就业平均薪资达11869.67元。
2026-03-05黑马全国校区齐开班!场面太太太壮观了!
2026-03-03