从破解编码面试中删除列表中的重复项



来自破解编码面试。问题 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 会更好,但这只是因为代码更好读。代码在语法上是正确的,在内部,集合只不过是具有相同内容的映射虚拟对象作为每个键的值。

函数中没有 return 语句,因为它被设置为 void。但是,如果列表的头部在某个变量中保留在函数之外,则返回正确的结果就足够了。这是因为第一个节点不会被删除,因为此时不会有任何重复项。毕竟,更改 n 值没有任何问题。

相关内容

  • 没有找到相关文章

最新更新