Java

时间:2017-07-30 14:55:03

标签: java loops linked-list nodes

问题: 给定循环链接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)的链表,并且如果我再次找到相同的节点,我假设它是循环开始处的节点。

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

1 个答案:

答案 0 :(得分:0)

是的,当然,我们可以有多种解决方案。并且,如果解决方案不可用,那么这并不意味着无法解决问题。

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

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