一个链表中包含环,请找出该链表的环的入口结点。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode *MeetingNode(ListNode *phead)
{
if(phead == NULL)
return NULL;
ListNode *pslow = phead->next;
if(pslow == NULL)
return NULL;
ListNode *pfast = pslow->next;
while(pfast != NULL && pslow != 0)
{
if(pfast == pslow)
return pfast;
pslow = pslow->next;
pfast = pfast->next;
if(pfast != NULL);
pfast = pfast->next;
}
return NULL;
}
ListNode* EntryNodeOfLoop(ListNode* pHead)
{
ListNode *meetnode = MeetingNode(pHead);
if(meetnode == NULL)
return NULL;
int count = 1;
ListNode *pnode = meetnode;
while(pnode->next != meetnode)
{
pnode=pnode->next;
count++;
}
pnode = pHead;
for(int i = 0 ; i<count;i++)
pnode = pnode->next;
ListNode *pnode1 = pHead;
while(pnode1 != pnode)
{
pnode=pnode->next;
pnode1 = pnode1->next;
}
return pnode;
}
};