问题: 给定循环链接llist,实现一个在循环开始时返回节点的算法。
我不是要求回答这个问题!
我知道有一些循环检测算法涉及两个指针以不同的速度移动,我已经知道这个问题的一些答案。
但是,我想知道的是,当我第一次尝试解决这个问题时,我这样接近:
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)的链表,并且如果我再次找到相同的节点,我假设它是循环开始处的节点。
这种方法有什么问题吗?如果有什么我误解,请告诉我。谢谢!
答案 0 :(得分:0)
是的,当然,我们可以有多种解决方案。并且,如果解决方案不可用,那么这并不意味着无法解决问题。
例如,另一种解决方案可能是,我们可以在每个节点中拥有flag
属性,并在访问时标记为checked
。在这种情况下,如果同一节点再次重复,那么我们可以检查flag
属性并检测循环。
现在,在您的情况下,您正在使用不必要的内存来存储节点对象,这可以通过运行循环来解决而无需存储节点对象。