我有一个算法,按照一定的方式通过图中的节点,偶尔会多次经过同一个节点,并且我需要形成一个节点列表,使得每个节点仅出现在我最后一次经过它时。
例如,如果我通过节点
我想做的是使用 LinkedList,以便图中的每个节点都包含对其在 LinkedList 中的节点的引用。然后,每次经过一个节点时,我将从 LinkedList 中删除其相应的节点,并将其重新插入到 LinkedList 的末尾,操作的复杂度仅为 O(1)。
然而,当我开始实现时,遇到了一个问题:显然,Java 类 LinkedList 不允许我查看其实际的列表节点。使用 LinkedList 的常规 remove 函数来删除包含给定图节点的列表节点将是 O(n),而不是 O(1),从而否定了使用 LinkedList 的初衷。
当然,我可以自己实现 LinkedList,但我宁愿避免这样做-我觉得如果我必须在 Java 中实现 LinkedList,那么我做错了什么。
因此,有没有一种方法可以在不实现自己的 LinkedList 的情况下解决此问题?我是否漏掉了什么东西?
例如,如果我通过节点
A -> B -> C -> A -> C
,则最终需要的列表是 [B,A,C]
。我想做的是使用 LinkedList,以便图中的每个节点都包含对其在 LinkedList 中的节点的引用。然后,每次经过一个节点时,我将从 LinkedList 中删除其相应的节点,并将其重新插入到 LinkedList 的末尾,操作的复杂度仅为 O(1)。
然而,当我开始实现时,遇到了一个问题:显然,Java 类 LinkedList 不允许我查看其实际的列表节点。使用 LinkedList 的常规 remove 函数来删除包含给定图节点的列表节点将是 O(n),而不是 O(1),从而否定了使用 LinkedList 的初衷。
当然,我可以自己实现 LinkedList,但我宁愿避免这样做-我觉得如果我必须在 Java 中实现 LinkedList,那么我做错了什么。
因此,有没有一种方法可以在不实现自己的 LinkedList 的情况下解决此问题?我是否漏掉了什么东西?