/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
public:
    ListNode* EntryNodeOfLoop(ListNode* pHead) {
        ListNode *m=f(pHead),*k=pHead;
        if(m!=NULL)
        {
            while(m!=k)
            {
                k=k->next;
                m=m->next;
            }
            return m;
        }
        return NULL;
        
    }
    ListNode *f(ListNode *head)
    {
        ListNode *k=head,*m=head;
        if(head!=NULL)
        {
            while(k!=NULL&&k->next!=NULL)
            {
                k=k->next->next;
                m=m->next;
                if(k==m)
                {
                    return m;
                }
            }
        }
        return NULL;
    }
};