从索引处的LinkedList中删除元素

时间:2016-10-08 13:19:22

标签: java singly-linked-list

我希望澄清有关从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;
}

从我所看到的,此代码最终会在您要删除的元素之前的元素处。然后它分配下一个&#39;字段到要删除的节点之后的节点。我的问题是,你不需要分配下一个&#39;要删除的节点的字段为空?我有点困惑,因为它看起来像下一个&#39;字段仍指向后面的元素,因此您有2个节点指向它。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

  

你不需要分配下一个&#39;要删除的节点的字段为空?

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

  

我有点困惑,因为

你必须考虑像C ++这样的另一种语言是如何工作的,你必须在这里用它来清除智能指针,因为它使用引用计数。

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

  

它看起来像是&#39; next&#39;字段仍指向后面的元素,因此您有2个节点指向它。

它是一个没有引用它的对象,所以它实际上并不存在。所有这一切都浪费了一点内存,直到垃圾收集器清理它。

答案 1 :(得分:0)

  

它看起来像是&#39; next&#39;字段仍指向

之后的元素

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