题目描述
一个链表中包含环,请找出该链表的环的入口结点。
思路:
s=l+d
2s=l+d+nr
l+d=nr
l=nr-d
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* EntryNodeOfLoop(ListNode* pHead)
{
if(pHead==NULL||pHead->next==NULL) return NULL;//如果只有一个pHead==NULL,就会报 段错误。
ListNode*psnow=pHead;
ListNode*pfast=pHead;
do{
psnow=psnow->next;
pfast=pfast->next->next;
}while(psnow!=pfast);
ListNode*p=pHead;
while(p!=psnow){
p=p->next;
psnow=psnow->next;
}
return p;
}
};
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* EntryNodeOfLoop(ListNode* pHead)
{
if(pHead==NULL||pHead->next==NULL) return NULL;
ListNode*pre=pHead;
ListNode*pfront=pHead->next;
while(pfront){
pre->next=NULL;
pre=pfront;
pfront=pfront->next;
}
return pre;
}
};