题目描述:

思路
1.判断链表是否成环
可用快慢指针的方法解决,由于成环,快指针走两步,慢指针走一步,每一次都相当于快指针向慢指针走一步,因此一定会相遇。
2.找到环的入口
不懂的时候点这里再看一遍吧,好牛逼。。。

总之就是用数学公式推导到最后发现快慢指针相遇的点跟链表头节点到入口的距离相同(也不叫相同,就是转了n圈后再相同)
struct ListNode *detectCycle(struct ListNode *head)
{
typedef struct ListNode Node;
Node* fast=head;
Node* slow=head;
while(fast&&fast->next)
{
fast=fast->next->next;
slow=slow->next;
if(fast==slow)
{
Node* index1=fast;
Node* index2=head;
while(index1!=index2)
{
index1=index1->next;
index2=index2->next;
}
return index1;
}
}
return NULL;
}