力扣204
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def detectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]:
# 初始化快慢指针,起点都是head
slow = fast = head
# 第一步:快慢指针遍历,找环内相遇点
while fast and fast.next:
slow = slow.next # 慢指针每次走1步
fast = fast.next.next # 快指针每次走2步
# 相遇 → 有环
if slow == fast:
# 第二步:从头节点出发,与相遇点同步走,相遇即环入口
p = head
while p != slow:
p = p.next
slow = slow.next
return p # 返回入口节点
# 快指针到尾 → 无环
return None
