struct ListNode* EntryNodeOfLoop(struct ListNode* pHead ) { if (pHead == NULL) return NULL; struct ListNode* fast = pHead; struct ListNode* slow = pHead; while(fast != NULL && fast->next != NULL){ slow = slow->next; //走一步 fast = fast->next->next; //走两步 if(slow == fast) break; //相遇→有环,退出while循环 } if(fast == NULL || fast->next == NULL) return NULL; //无环时快指针先到链尾 fast = pHead; //也可让慢指针回到链头重新开始 while(fast != slow){ fast = fast->next; slow = slow->next; } return fast; }