从索引处的 LinkedList 中删除一个元素

Removal of an element from LinkedList at index

我想澄清一些关于从 LinkedList 中删除元素的问题。鉴于此代码:

public boolean remove(int index)
{
    // if the index is out of range, exit
    if(index < 1 || index > size())
        return false;

    Node current = head;
    for(int i = 1; i < index; i++)
    {
        if(current.getNext() == null)
            return false;

        current = current.getNext();
    }
    current.setNext(current.getNext().getNext());
    listCount--; 
    return true;
}

据我所知,此代码在您要删除的元素之前的元素处结束。然后它将 'next' 字段分配给您要删除的节点之后的节点。我的问题是,您不需要将要删除的节点的 'next' 字段分配为空吗?我有点困惑,因为看起来 'next' 字段仍然指向之后的元素,所以你有 2 个节点指向它。

如有任何帮助,我们将不胜感激。

do you not need to assign the 'next' field of the node you want to remove to null?

在 Java 中没有充分的理由这样做。

I am a bit confused because

您一定在想另一种语言(如 C++)是如何工作的,您必须这样做才能清除智能指针,因为它使用引用计数。

在 Java 中,引用只是一个 4 字节的指针(或对象的索引)

it looks like the 'next' field still points to the element after, so you have 2 nodes pointing to it.

它是一个没有引用它的对象,因此它实际上不存在。它所做的只是浪费一点内存,直到垃圾收集器将其清理干净。

it looks like the 'next' field still points to the element after

这并不重要,因为没有任何内容指向已删除的节点,它最终会被垃圾收集器自动删除。