来自 Cracking the Coding Interview。 问题 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。我想你只需要 key ,对吧?
谢谢
最佳答案
首先,正如评论中已经提到的,局部参数的更改对调用者的输入变量没有影响。
其次,你是对的,使用 Set 会更好,但这只是因为代码更易读。代码在语法上是正确的,在内部一个 Set 只不过是一个 Map 具有相同的
dummyobject 作为每个键的值。
关于java - 从 Cracking the Coding Interview 中删除列表中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27180954/