题目描述
一个链表中包含环,请找出该链表的环的入口结点。
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
解题思路:利用指针遍历等方法较为复杂,可以用特殊的数据结构来帮助解决。
找到环的入口 = 找到一个已经遍历过而又即将再次被遍历的节点 = 将已经遍历的节点放在一边,每次要遍历下一个节点的时候都先看看是否已经遍历过
要实现上面这个过程,最简单高效的数据结构就是Set。我们可以利用Set中元素不相同的特点。
代码实现:
import java.util.Set;
import java.util.HashSet;
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead)
{
Set<ListNode> set = new HashSet();
while(pHead != null) {
if(!set.add(pHead)) {
//添加失败,说明集合中已经存在该元素,返回该值
return pHead;
}
pHead = pHead.next;
}
return null;
}
}
更多算法解答请点击
《剑指offer》66题JAVA代码算法实现全集 |