题解 | 链表中环的入口结点
链表中环的入口结点
https://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4
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 || pHead.next == pHead) {
return pHead;
}
// 如果自己头节点,没有下一个节点了,返回null
if(pHead.next == null) {
return null;
}
// 遍历联表,把联表中的节点放到set中,元素添加到set中如果存在相同的节点返回false,表示存在重复的节点,也就是环的开始;如果从头节点到末尾节点都成功添加到set结合中,表示不存在环,返回null
Set<ListNode> set = new HashSet<>();
ListNode tempNode = pHead;
set.add(tempNode);
while(tempNode.next != null) {
tempNode = tempNode.next;
if(!set.add(tempNode)) {
return tempNode;
}
}
return null;
}
}
查看7道真题和解析