我正在为SingleLinkedList实现编写一个清晰的函数。
/*
* Take the next node in some temp variable
* free the current node
* after freeing the current node, go to the next node with temp variable
* repeat this process for all nodes
*/
public void clear() {
if ( head == null ) {
return;
}
SListNode current = head;
while ( current._next != null ) {
SListNode temp = current._next;
current._data = 0;
current._next = null;
current = temp;
}
current._data = 0;
head = null;
size = 0;
}
SingleLinkedList类具有:
public class SingleLinkedList {
private SListNode head;
private int size;
... various member functions
}
SListNode有:
public class SListNode {
int _data;
SListNode _next;
}
检查了deleteList函数的执行情况: https://www.geeksforgeeks.org/write-a-function-to-delete-a-linked-list/
我认为deleteList函数使得头部指向null,而所有其他链接节点仍然应该指向其他链接,这可能会妨碍gc不进行清理。
问题是:我指示的方式(清楚fn)是否比上面网站(deleteList)中指出的解决方案更好?
答案 0 :(得分:0)
在Java中,悬挂指针不会发生,因为没有显式释放内存的机制。相反,垃圾收集器可能会释放内存,但只有当对象不再可以从任何引用中访问时。
答案 1 :(得分:0)
不,它不会留下任何悬空指针。垃圾收集器清除每个无法访问的指针。