一个快指针(慢指针的两倍),一个慢指针,如果有循环必定相遇。
假设起点到循环点长度为a,相遇点到循环点长度为b,循环剩下长度为c。
则很容易得到:
2*(a+b)==a+b+n*(b+c);
变形得:
a=(n-1)*(b+c)+c;
可以得出,再次另一个指针指向链表头,和相遇点指针同速前进,必定在循环点相遇。
![Phase 2 diagram](https://leetcode.com/articles/Figures/142/diagram.png)
一个快指针(慢指针的两倍),一个慢指针,如果有循环必定相遇。
假设起点到循环点长度为a,相遇点到循环点长度为b,循环剩下长度为c。
则很容易得到:
2*(a+b)==a+b+n*(b+c);
变形得:
a=(n-1)*(b+c)+c;
可以得出,再次另一个指针指向链表头,和相遇点指针同速前进,必定在循环点相遇。
转载于:https://www.cnblogs.com/plexi/articles/8669704.html