判断链表是否包含环属于经典问题了,解决方案也是用快慢指针:
每当慢指针 slow 前进一步,快指针 fast 就前进两步。
如果 fast 最终能正常走到链表末尾,说明链表中没有环;如果 fast 走着走着竟然和 slow 相遇了,那肯定是 fast 在链表中转圈了,说明链表中含有环。
只需要把寻找链表中点的代码稍加修改就行了:
class Solution:
def hasCycle(self, head: ListNode) -> bool:
# 快慢指针初始化指向 head
slow, fast = head, 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