【发布时间】:2014-01-04 00:36:36
【问题描述】:
对于这段代码(Cracking the Coding Interview 2.1 的解决方案):当你做prev.next = n.next 时,n 会被垃圾收集器收集吗?那你怎么办n = n.next?
2.1的问题是:编写代码从未排序的链表中删除重复项。
有人可以向我解释一下垃圾收集器在这种情况下是如何工作的吗?
public static void removeDup (LinkedListNode del)
{
LinkedListNode prev = null;
Hashtable myTable = new Hashtable();
while(del!= null)
{
// table does not have the key yet
if (myTable.containsKey(del.data) == false)
{
myTable.put(del.data, true);
prev = del;
}
// table has the duplicate
else
{
prev.next = del.next;
}
del = del.next;
}
}
【问题讨论】:
-
对不起,Hashtable table = new Hashtable();应该在while循环之外。我的错。我已经在代码中解决了这个问题。
-
文体说明,你为什么使用 Hashtable?您实际上并不关心分配给您提取的每个键 (del.data) 的值 (true)。
Set/HashSet可能会让你的代码看起来更干净 :)
标签: java garbage-collection linked-list