这里有一个结论,一个指针从头节点的位置出发,另一个指针从相遇点的位置出发,它两最终会在入环节点处相遇
看代码
struct ListNode *detectCycle(struct ListNode *head)
{
struct ListNode *fast = head;
struct ListNode *slow = head;
while(fast && fast->next) //不能为空,如果为空的话下面就对空指针访问了
{
fast = fast->next->next; //一次走两个节点
slow = slow->next; //一次走一个节点
//是环型的了,接下来就判断入环的起点了
if(slow == fast)
{
struct ListNode *meet = fast;
while(meet != head)
{
meet = meet->next;
head = head->next;
}
return meet;
}
}
return NULL;
}