更新时间: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设计】北京143期毕业仅36天,全员拿下高薪offer!黑马AI设计连续6期100%高薪就业
2025-09-19【跨境电商运营】深圳跨境电商运营毕业22个工作日,就业率91%+,最高薪资达13500元
2025-09-19【AI运维】郑州运维1期就业班,毕业14个工作日,班级93%同学已拿到Offer, 一线均薪资 1W+
2025-09-19【AI鸿蒙开发】上海校区AI鸿蒙开发4期5期,距离毕业21天,就业率91%,平均薪资14046元
2025-09-19【AI大模型开发-Python】毕业33个工作日,就业率已达到94.55%,班均薪资20763元
2025-09-19【AI智能应用开发-Java】毕业5个工作日就业率98.18%,最高薪资 17.5k*13薪,全班平均薪资9244元
2025-09-19