题目描述:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。
解题思路:
利用快慢指针同时从A点出发,相遇时慢指针走过的距离是X+Y,快指针则是2(X+Y),为A到B到C到B到C,可以算出像一点到起点的位置是X,此时将快指针重新指向结点头部,与第一次相遇的结点相同速度出发,相遇结点为入口结口。
ListNode* EntryNodeOfLoop(ListNode* pHead) {
ListNode *fast = pHead,*slow = pHead;
int num = 0;
while(1)
{
if(fast->next == NULL || fast->next->next == NULL)
return NULL;
fast = fast->next->next;
slow = slow->next;
num++;
if(fast == slow)
{
if(fast==pHead)
return pHead;
fast = pHead;
while(1)
{
fast = fast->next;
slow = slow->next;
if(fast == slow)
return slow;
}
}
}
}