/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pHead ListNode类
* @return ListNode类
*/
int hascycle(struct ListNode *phead)
{
struct ListNode *fastpointer=phead,*slowpointer=phead;
while(fastpointer!=NULL&&fastpointer->next!=NULL)
{
fastpointer=fastpointer->next->next;
slowpointer=slowpointer->next;
if(slowpointer==fastpointer)
return 1;
}
return 0;
}
struct ListNode* Meet (struct ListNode *phead)
{
struct ListNode *fastpointer=phead,*slowpointer=phead;
do {
fastpointer=fastpointer->next->next;
slowpointer=slowpointer->next;
}while(fastpointer!=slowpointer);
return fastpointer;
}
struct ListNode* EntryNodeOfLoop(struct ListNode* pHead ) {
// write code here
int p=hascycle(pHead);
if(p==0)
{
return NULL;
}
struct ListNode *meet=Meet(pHead);
struct ListNode *cur=pHead;
while(cur!=meet)
{
cur=cur->next;
meet=meet->next;
if(cur==meet)
break;
}
return cur;
}