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