/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } }; */ class Solution { public: ListNode* EntryNodeOfLoop(ListNode* pHead) { if (!pHead || !pHead->next) return nullptr; ListNode* slow = pHead; ListNode* fast = pHead; // 第一阶段:寻找快慢指针的相遇点 do { if (!fast || !fast->next) return nullptr; slow = slow->next; fast = fast->next->next; } while (slow != fast); // 第二阶段:寻找环的入口 slow = pHead; while (slow != fast) { slow = slow->next; fast = fast->next; } return slow; } };