题解 | #链表中环的入口结点#

链表中环的入口结点

http://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4

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

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

    public ListNode EntryNodeOfLoop(ListNode pHead) {
        /*
 public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
*/
         
        if(pHead == null ||pHead.next == null){
            return null;
        }
        //快慢指针
        //假设入环有M 个元素,环中有N个元素
        //第一次相遇 慢指针走了S ,快指针走了2S, (S - M)%N == (2S -M)%N , 相遇时环中位置index是一样的
        //快指针放到链表头,按慢指针走法  第二次相遇时,画个图就看出来了,或者从上面的列的式子就可以看出 走X=M步 (S-M+X)%N  == 0
        ListNode slow = pHead;
        ListNode fast = pHead;
        boolean isMeet = false;
        while(fast != null && fast.next != null){
            if(!isMeet){
                slow = slow.next;
                fast = fast.next.next;
                if(fast == null){
                    return null;
                }
                if(slow == fast){
                    isMeet = true;
                    fast = pHead;
                }
            }else{
                if(slow == fast){
                    return slow;
                }
                slow = slow.next;
                fast = fast.next;
            }
        
        }
        return null;
    }
 
   
}
全部评论

相关推荐

03-31 17:40
已编辑
门头沟学院 算法工程师
程序员牛肉:小牛肉来也! 也不要焦虑啦,你第一志愿还没有结束,只是回到人才库(泡大池子等待各个部门挑选)而已。仅仅代表你不符合这个组的用人标准,并不能够说明你在本次暑期实习中没机会加入美团了。 还是平复好心态,不断的复盘,等待下一次面试就好了。
点赞 评论 收藏
分享
吴offer选手:学到了,下次面试也放张纸在电脑上,不然老是忘记要说哪几个点
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务