【发布时间】:2011-11-25 19:57:03
【问题描述】:
我想知道是否有人可以帮助我解决这个问题。我相信我大部分都了解代码和逻辑。我可以跟踪代码,这很有意义,但我不明白的一件事是.... LinkedListNode 之前的实际如何更改传入的 LinkedListNode n?
在我看来,该函数循环遍历 n,如果尚未找到该元素,则将其放入哈希表中。但是当它再次被发现时,它使用这个新创建的 LinkedListNode previous 跳过重复项并链接到下一个元素,即 n.next。 这实际上是如何断开 LinkedListNode n 的?似乎以前的 LinkedListNode 没有重复项,但是由于此函数中没有返回任何内容,因此 n 必须是更改的那个。我想我没有看到 n 实际上是如何改变的。
我们将非常感谢您提供清晰而彻底的帮助。谢谢=)
public static void deleteDups(LinkedListNode n){
Hashtable table = new Hashtable();
LinkedListNode previous = null;
while(n != null){
if(table.containsKey(n.data))
previous.next = n.next
else{
table.put(n.data, true);
previous = n;
}
n = n.next;
}
}
行不行...
LinkedListNode previous = null;
创建一个新的 LinkedListNode?p>
所以这就是我如何做的逻辑...... 假设参数 n 传入为
5 -> 6 -> 5 -> 7
当代码第一次运行时,previous 为空。它进入了else语句,而previous现在是5?然后行 n = n.next 使 n 6?现在哈希表有 5 个,它再次循环并进入 else。 prev 现在是 6,hastable 有 6。然后 n 变为 5。它再次循环,但这次它进入 if,prev 现在是 7。n 将变为 7。我看到 prev 跳过了 5,但是.. .prev 如何取消链接 n?似乎 prev 是不包含重复项的 LinkedListNode
【问题讨论】:
-
"LinkedListNode 上一个 = null;" - 这不会创建新节点 - 这只是对节点的引用,而不是节点本身。
标签: java linked-list duplicates