2016-10-08 57 views
1

我正在寻求澄清有关从链表中删除元素的内容。鉴于此代码:从链表中删除元素在索引

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'字段分配为空?我有点困惑,因为它看起来像'下一个'字段仍然指向后面的元素,所以你有2个节点指向它。

任何帮助,将不胜感激。

+0

但是这个元素不能从列表中访问,即通过列表方法它不会影响任何东西。 –

回答

2

您是否需要将要删除的节点的'next'字段指定为null?

没有理由在Java中这样做。

我有点困惑,因为

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

在Java中,一个参考仅仅是一个4个字节的指针(或索引到对象)

它看起来像“下一个”字段仍然指向后的元件,所以你有2个节点指向到它。

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

+1

谢谢,现在有道理 – dalold

0

它看起来像“下一个”领域仍然指向元素之后

这并不重要,因为没有指向删除的节点将最终自动垃圾收集器删除。