题目描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null
解析1:本题可以直接用hashmap,保存节点和出现的次数。当键已经包含节点的时候,结束循环,输出当前节点,否则node=node.next。具体思路看代码
import java.util.*;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead) {
if (pHead==null)return null;
HashMap<ListNode,Integer> map=new HashMap<>();
ListNode node=pHead;
while(node!=null){
if(!map.keySet().contains(node)){
map.put(node,1);
node=node.next;
}else {
break;
}
}
return node;
}
}
解法二:此题也可以考虑用一个Arraylist做,每个arr存储节点,当包含节点的时候推出循环,否则node=node.next;
import java.util.*;
import java.util.ArrayList;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead) {
if (pHead==null)return null;
ArrayList<ListNode> list=new ArrayList<>();
ListNode node=pHead;
while(node!=null){
if(!list.contains(node)){
list.add(node);
node=node.next;
}else break;
}
return node;
}
}