0

嗨,我正在做一个关于哈希表的作业。一切都很好,除了删除方法。这是代码:

public boolean remove(K key) throws HashTableException {
    //
    //IMPLEMENT THIS FUNCTION
    //
    if (key == null)
        throw new HashTableException("Null keys not allowed in the hash table");

    int index = getIndex(key);
    HashTableNode<K,V> node = FindNode(key,index);
    if (node == null) {
        return false;
    } else {
        if (node.getNext() == null) {
            node = null;
        } else {
            node = node.getNext();
        }
        return true;
    }
}

它根本不会删除密钥。任何人都可以帮助我吗?谢谢你!

4

3 回答 3

1

节点=空;不会“删除”节点,它只是将此方法中的变量 node 的值设置为 null。它对哈希表中某处的实际节点没有任何作用。

然后在下一个“else”中你有 node = node.getNext(); 同样,仅更改此方法中的节点变量。但是由于您从该方法返回而没有对这个变量做任何其他事情,所以这一切都是徒劳的,因为 node 是一个仅存在于该方法中的局部变量。

您应该阅读 java 中局部变量和引用的概念,这可能会导致理解为什么这不起作用:)

于 2013-10-23T07:46:22.627 回答
1

节点 = node.getNext();

通过这一行,我认为您只是遍历而不是重写 Next 指针

也许你应该尝试 node.getPrev().setNext = node.getNext(); 如果您可以找到上一个节点并能够设置下一个节点。

于 2013-10-23T07:53:31.023 回答
0

请确保 hashcode() 和 equals() 被正确覆盖。

于 2013-10-23T07:44:47.683 回答