删除单个链表中间的节点

时间:2016-10-03 16:06:54

标签: java linked-list garbage-collection

我编写了一个程序,在给定节点的情况下删除单个链表中的节点。

public class Solution {
    /**
     * @param node: the node in the list should be deleted
     * @return: nothing
     */
    public void deleteNode(ListNode node) {
        // write your code here
        // if node.next==null, we cannot delete the current node without given the previous node
        if(node == null || node.next == null) return;
        ListNode next = node.next;
        node.val = next.val;
        node.next = next.next;
        // I wonder if this link needs to be removed as well
        next.next = null;        
    }
}

问题很简单。但是,许多在线代码示例都不包含我写的这行:

        next.next = null;        

如果没有这一行,我们已经删除了该节点。在那之后,虽然没有任何东西指向" next"," next"仍然指向next.next。如果不设置next.next = null,Java垃圾收集器是否会删除此已删除的节点?

1 个答案:

答案 0 :(得分:1)

确实会。 gc迭代所有对象并检查其他人是否指向它。如果没有,则标记为删除。