题解 | #寻找链表中环的入口#

链表中环的入口结点

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

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

ListNode(int val) {
    this.val = val;
}

} */ //快慢索引,具体见下图 alt public class Solution {

public ListNode EntryNodeOfLoop(ListNode pHead) {
    ListNode low = pHead;
    ListNode fast = pHead;
   if(pHead == null ) {//链表为空直接返回
       return null;
   }else{
       low = low.next;//慢索引先走一步
       if(low == null) return null;//为空返回
        fast = fast.next;//快索引走一步
        if(fast == null) return null;//为空返回
        fast = fast.next;//快索引再走一步
       if(fast == null) return null;//为空返回
       
      //找到第一次相遇的节点
       while(low != fast ){
         low = low.next;//慢索引先走一步
       if(low == null) return null;//为空返回
        fast = fast.next;//快索引走一步
        if(fast == null) return null;//为空返回
        fast = fast.next;//快索引再走一步
       if(fast == null) return null;//为空返回
    }
   }    
  //第一次相遇之后,快慢索引同速同步运动,慢索引返回头部重新开始运动
    //快索引从相遇节点运动
    //两个索引节点再次相遇时就是链表中环的入口
        low = pHead;
        while(low != fast){
        low = low.next;
        fast = fast.next;          
    }                                      
    return low;
}

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

ListNode(int val) {
    this.val = val;
}

} */ public class Solution {

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

}

全部评论

相关推荐

11-13 20:16
已编辑
厦门理工学院 软件测试
专业嗎喽:硕佬,把学校背景放后面几段,学校背景双非还学院,让人看了就不想往下看。 把实习经历和个人奖项放前面,用数字化简述自己实习的成果和掌握的技能,比如负责项目一次通过率90%,曾4次发现项目潜在问题风险为公司减少损失等等
点赞 评论 收藏
分享
投递亚信科技(中国)有限公司等公司6个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务