Java 中链表中的循环/循环检测



问题: 给定一个循环链接列表,实现一个在循环开始时返回节点的算法。

我不是在要求回答这个问题!

我知道有一些循环检测算法涉及两个以不同速度移动的指针,我已经知道这个问题的一些答案。

但是,我想知道的是,当我第一次尝试解决这个问题时,我是这样接近的:

LinkedListNode loopExists(LinkedListNode node) {
HashSet hs = new HashSet();
while(node != null) {
if(hs.contains(node))
return node;
else
hs.add(node);
node = node.next;
}
return null;
}

我很好奇,因为没有像我上面发布的答案

。问题是在循环开始时询问节点。

如果我遍历链表检查每个节点(不是node.data(,如果我再次找到相同的节点,我假设这是循环开始时的节点。

这种方法有什么问题吗?如果我有什么误解,请告诉我。谢谢!

是的,当然,我们可以有多种解决方案。而且,如果解决方案不可用,那么这并不意味着它不能成为解决方案。

例如,另一种解决方案可能是,我们可以在每个节点中flag属性,并在访问时标记为checked。在这种情况下,如果同一节点再次重复,那么我们可以检查flag属性并检测循环。

现在,在您的情况下,您正在使用不必要的内存来存储节点对象,这可以通过运行循环来在不存储节点对象的情况下解决。

相关内容

  • 没有找到相关文章

最新更新