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

链表中环的入口结点

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

public class Solution {

public ListNode EntryNodeOfLoop(ListNode pHead) {
    ArrayList<Integer> arr = new ArrayList<>();//定义存放值的list
    if(pHead==null){
        return null;
    }
    boolean is = isLoop(pHead);//判断是不是环形
    ListNode head = pHead;
    if(is){
        while(true){
            if(arr.contains(head.val)){//如果遇到第一个值相同了那么这个点就是顶点。
               return head;
            }else{
               arr.add(head.val); 
                head = head.next;
            }
        }
    }
    return null;
}
//判断是否能构成环(定义两个指针一次跳一下,一次跳两下,如果有环那么这两个指针一定会相遇)
//(类比操场跑步。一个人跑的块,一个人跑的慢,如果操场是环形,那么跑的快的和跑的慢的一定会重合。)
public boolean isLoop(ListNode head){
   ListNode point1 = head;
    ListNode point2 = head;
    while(true){
        try{
             point1 = point1.next;
            point2 = point2.next.next;
            if(point1==point2){
            return true;
            }//这里用异常判断算是一种新思路吧,如果不是环形那么会报错的。
        }catch(Exception e){
            return false;
        }
    }
}

}

全部评论

相关推荐

预计下个星期就能开奖吧,哪位老哥来给个准信
华孝子爱信等:对接人上周说的是这周
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务