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

链表中环的入口结点

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

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

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

    public ListNode EntryNodeOfLoop(ListNode pHead) {
      
        if(pHead.next==null){
            return null;
        }
        if(pHead.next==pHead){
            return pHead;
        }
        HashMap<Integer,Integer> hashMap = new HashMap<>();
        ListNode cur = pHead;
        ListNode ans = null;
        while(cur!=null){
            int temp = hashMap.getOrDefault(cur.val,0)+1;
            if(temp==1){
                 hashMap.put(cur.val,temp);
            }else if(temp==2){
                ans = cur;
                break;
            }
            cur=cur.next;
        }
        return ans;
    }
}

看到这道题目,先分析了一下, 1.如果pHead只有一个,存在一种情况,就是如果next指向自己或者指向空,也就是代码的前两个if判断。 2.再思考,证明是一个环,只需要证明它来过即可,那么可以给他来一个标志,比如,我用hashmap的key记录结点的值,value记录来过的次数,当有第一次出现来过两次的结点,就找到了环的入口处 3.继续思考:这道题目有没有瑕疵呢,加入有重复的listnode会不会出错呢,我先写完分享,然后再去试试,大家也可以尝试一下。 4.第一次写,希望大家指正。

全部评论

相关推荐

努力成为C语言高手:质疑大祥老师,理解大祥老师,成为大祥老师
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务