题解 | 链表中环的入口结点
链表中环的入口结点
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; } }