java - 从 Cracking the Coding Interview 中删除列表中的重复项

标签 java linked-list

来自 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/

相关文章:

Java定时器代码执行JAR

c++ - 如何指向链表中的下一个节点并打印值

将链表复制到C中的另一个列表

java - 在字符串链表的链表中查找重复项的最有效方法 - java

java - 在netty库中,我想知道如何根据cpu号创建多个线程?

java - Servlet中如何获取用户角色?

java - 未知的整数数据类型

java - 将可变方法映射到 Clojure 中的 Java 对象

c - 在C中的链表的末尾或开头添加节点

java - 如何检查链表中的多个值?