题目描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
解题思路
使用快慢两个指针实现,若存在环,则两指针会在环内相遇,然后让快指针指向头结点,速度和慢指针一样,再继续走,下次相遇的的结点即为所求。
代码实现
class Solution {
public:
ListNode* EntryNodeOfLoop(ListNode* pHead)
{
if(!pHead)return NULL;
ListNode *p,*q;
q=pHead,p=pHead->next;
if(!p)return NULL;
while(p&&q&&p!=q){
p=p->next,q=q->next;
if(p)p=p->next;else return NULL;
}
p=pHead,q=q->next;
while(p!=q)p=p->next,q=q->next;
return p;
}
};
运行时间:2ms
占用内存:400k