一开始感觉用双指针,但是没想到第一次相遇,不是在环的入口结点,所以一直出问题。最后看题解后,得出双指针的解法如下:
class Solution {
public:
ListNode* EntryNodeOfLoop(ListNode* pHead) {
if(pHead==NULL) return NULL;
ListNode* slow=pHead;
ListNode* fast=pHead;
while(fast!=NULL && fast->next!=NULL) {
fast=fast->next->next;
slow=slow->next;
if(fast==slow) break;
}
if(fast==NULL || fast->next==NULL) return NULL;
fast=pHead;
while(fast!=slow) {
fast=fast->next;
slow=slow->next;
}
return fast;
}
};