/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } }; */ class Solution { public: ListNode* EntryNodeOfLoop(ListNode* pHead) { ListNode* p1, *p2; p1 = pHead; p2 = pHead; while (p2 != nullptr && p2->next != nullptr) { p1 = p1->next; p2 = p2->next->next; if (p1 == p2) { p2 = pHead; if (p1 == p2) //环的入口可能在第一个结点处(示例:{},{1,2,3,4,5}) { return p1; } else { while (p2 != nullptr && p2->next != nullptr) { p1 = p1->next; p2 = p2->next; if (p1 == p2) { return p1; } } } } } return nullptr; } };