题解 | #链表中环的入口结点#
链表中环的入口结点
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.第一次写,希望大家指正。