ListNode* EntryNodeOfLoop(ListNode* pHead) { bool haveCircle = false; if (pHead == NULL || pHead->next == NULL) //空链表或只有一个节点 return NULL; ListNode *slow = pHead; ListNode *fast = pHead; while (fast->next != NULL &&fast->next->next != NULL) { slow = slow->next; fast = fast->next->next; if (fast == slow) { haveCircle = true; break; } } if (!haveCircle) return NULL; slow = pHead; //有个公式,遇到相等节点后一个从开头走再遇到就是入口 //不用公式的话就求环的节点数,然后快慢指针,快的先走n while (slow != fast) { slow = slow->next; fast = fast->next; } return slow;