/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } }; */ class Solution { public: ListNode* EntryNodeOfLoop(ListNode* pHead) { ListNode* oneStep = pHead; ListNode* twoStep = pHead; ListNode* loopNode = pHead; while (twoStep->next != nullptr) { oneStep = oneStep->next; twoStep = twoStep->next->next; if (oneStep == twoStep) { break; } } if (twoStep->next == nullptr) { return nullptr; } while (oneStep != loopNode) { oneStep = oneStep->next; loopNode = loopNode->next; } return loopNode; } };