链表元素删除
来源:4-5 从链表中删除元素

SsssZzzz
2018-05-11
我把ppt删除逻辑看完 自己先尝试着写了一些代码,再回过头看老师的实现,
有一处有出入的地方,可能对GC方面了解的比较浅薄,所以产生了一个疑问;
老师的删除实现中,把删除的节点的next域赋值为null,而我的代码则是直接把删除的节点赋值为null;
所以如果按照我的实现方式,那删除节点中next域中还持有的下一个节点的引用,那这块内存空间最后能不能被GC回收。
public E remove(int index){ if (index < 0 || index >= size) { throw new IllegalArgumentException("LinkedList.remove failed, index is illegal!"); } Node previous = dummyHead; for (int i = 0; i < index; i++){ previous = previous.next; } Node<E> current = previous.next; previous.next = current.next; E ret = current.data; current = null; return ret; }
写回答
1回答
-
将current设为null,只是改变了current这个引用的指向。这个待删除节点的next依然指着原先他所指向的位置。请参考课程这一小节3:10处链表元素删除常见错误的内容,你这样做实质上和其中讲的问题是一致的:)
只不过,不同的是,这样做程序没有错!不存在逻辑的问题。可以再参考这个问答:https://coding.imooc.com/learn/questiondetail/54372.html
022018-05-12
相似问题