方法:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *detectCycle(struct ListNode *head) {
struct ListNode * slow = head, *fast = head;
while(fast != NULL && fast->next != NULL)
{
slow = slow->next;
fast = fast->next->next;
if(slow == fast)
{
struct ListNode * start = head;
struct ListNode * meet = slow;
while(start != meet)
{
start = start->next;
meet = meet->next;
}
return start;
}
}
return NULL;
}
思路:
首先使用快慢指针检查链表是否有环,如果有环,则创建一个从头开始的指针,从头节点到如环节点的距离和是从相遇点到入环点的距离的整数倍。
证明: