/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } }; */ class Solution { public: ListNode* EntryNodeOfLoop(ListNode* pHead) { if (pHead == NULL || pHead->next == NULL) return NULL; ListNode* slower = pHead, *faster = pHead, *entry = pHead; while(faster->next && faster->next->next) { faster = faster->next->next; slower = slower->next; if (faster == slower) { while(slower != entry) { entry = entry->next; slower = slower->next; } return entry; } } return NULL; } };