/*
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;
}
};