/** * 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; }