📅  最后修改于: 2023-12-03 15:10:19.928000             🧑  作者: Mango
给定一个链表,判断该链表是否有环路。若有环路返回 true
,否则返回 false
。
一种常见的解决方案是使用两个指针,一个快指针 fast
和一个慢指针 slow
,同时从链表头部出发。每次循环,快指针 fast
前进两步,慢指针 slow
前进一步。如果快指针 fast
追上了慢指针 slow
,说明该链表存在环路。
代码如下:
def has_cycle(head: ListNode) -> bool:
if not head or not head.next:
return False
slow = head
fast = head.next
while slow != fast:
if not fast or not fast.next:
return False
slow = slow.next
fast = fast.next.next
return True
其中,ListNode
表示链表节点的类,其定义如下:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
现给出一些测试样例:
False
False
False
True
链表环路判断是一道经典的面试题,掌握解决方案对于程序员来说是必不可少的。