我希望澄清有关从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个节点指向它。
任何帮助都将不胜感激。
答案 0 :(得分:2)
你不需要分配下一个&#39;要删除的节点的字段为空?
没有充分的理由在Java中这样做。
我有点困惑,因为
你必须考虑像C ++这样的另一种语言是如何工作的,你必须在这里用它来清除智能指针,因为它使用引用计数。
在Java中,引用只是一个4字节的指针(或对象的索引)
它看起来像是&#39; next&#39;字段仍指向后面的元素,因此您有2个节点指向它。
它是一个没有引用它的对象,所以它实际上并不存在。所有这一切都浪费了一点内存,直到垃圾收集器清理它。
答案 1 :(得分:0)
它看起来像是&#39; next&#39;字段仍指向
之后的元素
它并不重要,因为没有任何东西指向被删除的节点,它最终会被垃圾收集器自动删除。