题目:一个链表中包含环,找出环的入口点。
1.判断链表是否带环??
定义一个快指针,每次走两步;定义一个慢指针,每次走一步,如果他们相遇,就说明链表带环。
2.在求环的入口点??
L-a-x为快指针到入口点的距离。
如公式可知:
即让慢指针从链表头结点开始走,快指针不变,当他们相遇时,就是环的入口点。
ListNode* EntryNodeOfLoop(ListNode* pHead)
{
if(pHead==NULL)
return NULL;
ListNode* slow=pHead;
ListNode* fast=pHead;
while(fast&&fast->next)//奇数和偶数
{
slow=slow->next;
fast=fast->next->next;
if(slow==fast)
{
slow=pHead;
while(slow!=fast)
{
slow=slow->next;
fast=fast->next;
}
return slow;
}
}
return NULL;
}