题目描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
- 从链头到链尾遍历链表并对访问一个节点做记录,每访问一个节点,还要检查其否是被访问过。第一个重复访问的节点,必然是环的入口节点。
- 需要O(n)的空间复杂度。
1 | class Solution: |
- 一快一慢两个指针遍历链表必然会相遇,相遇节点必在环上。
- 由环上一节点开始,循环一周,可得环上节点数。
- 两个指向链表头的指针,其中一个先移动步数位环上节点数,然后二者以相同的速度移动,首次相遇必在入口节点。
- 设环上节点数
n
,一共有节点数L
,则不在环上的节点有L-n
个。设相遇时第二个节点移动了x
步,则第一个指针一共移动了n+x
步。当x=L-n
时,有第一个节点刚好遍历完所有节点,当前指向环的入口节点;而第二个节点也指向同样的节点,也就是说二者会相遇。
- 设环上节点数
1 | class Solution: |