问题
思路
第一次相遇的地方,重置p,正常走,第二次相遇的地方就是环的入口。
小心没有环的情形。
代码
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* EntryNodeOfLoop(ListNode* pHead)
{
if(!pHead) return NULL;
ListNode* p = pHead;
ListNode* q = pHead;
do{
p = p->next;
if(!p) return NULL;
p = p->next;
if(!p) return NULL;
q = q->next;
}while( p != q );
p = pHead;
while(p != q){
p = p->next;
q = q->next;
}
return p;
}
};