```/*function ListNode(x){
    this.val = x;
    this.next = null;
}*/
function EntryNodeOfLoop(pHead)
{
    // write code here 
    //参考剑指,让p1指针先走环中节点数目n步(这里最重要,建议画图自己模拟),然后p1、p2同时出发,相遇则为环的入口
    //环中节点数目可以通过快慢指针判断是否有环,在指针相遇的节点开始计数来得出
    if(pHead === null || pHead.next === null){return null}
    let p1 = pHead
    let p2 = pHead
    //当p2和p2.next都存在时,快慢指针步进直到相遇,如果没有环那么指针不会相遇也不会返回值
    while(p2 && p2.next){
        p1 = p1.next
        p2 = p2.next.next
        //相遇时存在环,记录节点,并将慢指针p2重置回pHead
        if(p1===p2){
            p2 = pHead
            let temp = p1
            let n = 1
            while(p1.next!==temp){
                n++
                p1=p1.next
            }
            //让快指针先走n步
            p1=pHead
            for(let m=0;m<n;m++){p1=p1.next}
            //p1、p2开始同时向前步进,相遇即是入口节点
            while(p1!==p2){
            p1 = p1.next
            p2 = p2.next
            }
            if(p1===p2){return p1}
        }
    }
}
module.exports = {
    EntryNodeOfLoop : EntryNodeOfLoop
};