一、OJ题
给定一个链表,返回链表开始入环的第一个节点:
https://leetcode-cn.com/problems/linked-list-cycle-ii/description/
二、证明
让一个指针从链表起始位置开始遍历链表,同时让一个指针从判环时相遇点的位置开始绕环运行,
两个指针都是每次均走一步,最终肯定会在入口点的位置相遇。
三、代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *detectCycle(struct ListNode *head)
{
struct ListNode *fast = head,*slow = head;
struct ListNode *tail = head;
while(fast&&fast->next)
{
slow = slow->next;
fast = fast->next->next;
if(slow==fast)
{
while(slow!=tail)
{
slow = slow->next;
tail = tail->next;
}
return tail;
}
}
return NULL;
}