/*
 public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {

    public ListNode EntryNodeOfLoop(ListNode pHead) {
        if(pHead == null) {
            return null ;
        }
        ListNode fast = pHead ;
        ListNode slow = pHead ;
        
        do{
            if(fast.next == null) {
                return null ;
            } else {
                fast = fast.next.next ;
                slow = slow.next ;
                if(fast == null || slow == null) {
                    return null ;
                }
            }
        } while(slow != fast) ;
        slow = pHead ;
        while(fast != slow) {
            fast = fast.next ;
            slow = slow.next ;
        }
        return slow ;
    }
}