题目描述
一个链表中包含环,请找出该链表的环的入口结点。
思路分析
这道题目很简单,由于单链表有环,因而遍历单链表时,会回到环入口。即如果遍历时第一次发现遍历过的结点必定就是环入口结点。java中HashSet的add方法可轻松判断。当add新的元素时,返回true,否则返回false。
代码实现
import java.util.Set;
import java.util.HashSet;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
// 灵机一动,HashSet真是个好东西
public ListNode EntryNodeOfLoop(ListNode pHead)
{
if(pHead == null || pHead.next == null){
return null;
}
ListNode current = pHead;
Set<ListNode> set = new HashSet();
// 当set中不存在当前结点,就把当前结点保存在Set中
while(set.add(current)){
current = current.next;
}
// 当放不进去了,说明该结点Set中已经存在,即链表的环入口结点
return current;
}
}