【发布时间】:2014-11-28 02:05:18
【问题描述】:
来自破解编码面试。 问题 2.1:编写代码以从未排序的链表中删除重复项。 这是他们提供的解决方案:
public static void removeDuplicates(Node n) {
Hashtable<Integer, Boolean> table = new Hashtable<Integer, Boolean>();
Node previous = n;
while (n != null) {
if (table.containsKey(n.data)) {
previous.next = n.next;
} else {
table.put(n.data, true);
previous = n;
}
n = n.next;
}
}
我的问题是: 当你做 n=n.next 时,你不会丢失链表的头部(第一个节点)吗? 如果您无法访问头部,您将如何在删除重复项后再次访问此列表?
而且使用 Set 代替 Table 不是更好吗? 我认为您不需要 Key 和 Value。我想你只需要钥匙,对吧?
谢谢
【问题讨论】:
-
n是函数的局部变量。对它的更改不会影响调用函数中的原始变量。 -
这看起来很糟糕,你确定他们不想欺骗你吗?!
标签: java linked-list