题目链接
https://leetcode.com/problems/linked-list-cycle-ii/
题目描述
给定一个链表,如果链表中有环,返回链表中环的起始位置。如果没有环则返回null。
示例
给定链表:
输出:1(索引为1的节点为环的起点)
解题思路
首先我们通过【leetcode-Python】-快慢指针-141. Linked List Cycle判断链表中是否有环,fast指针一次走两步,slow指针一次走一步,如果发现fast指针和slow指针相遇则跳出,此时fast指针和slow指针都指向相遇位置。假设相遇时slow指针走了k步,那么fast指针一定走了2k步,同时fast指针比slow指针多绕了一圈环,因此可以得到环的长度为k。假设环起点到相遇点距离的较短部分为m,那么环起点到头节点的距离为k-m(由slow指针相遇时走了k步得到)。另外从相遇点继续前进k-m步也能到达环起点。