在代码

时间:2016-10-13 17:19:24

标签: java linked-list garbage-collection

我正在浏览Geeks4Geeks上的链接列表面试问题,并且有一个关于删除单个链接列表中的节点的问题。它不应该修改头节点,也不应该返回指向头节点的指针。

据我所知,由于头节点无法修改,如果删除头节点,基本上我们需要将所有内容从第二个节点复制到头节点并释放第二个节点的内存地址。在C实现中,它是对free()的显式调用。但是在Java中,代码中是否需要system.gc(),或者它只是垃圾收集器应该运行的含义?

这是代码片段(第一个参数是头节点,第二个是要删除的节点):

void deleteNode(Node node, Node n) {

    // When node to be deleted is head node
    if (node == n) {
        if (node.next == null) {
            System.out.println("There is only one node. The list "
                             + "can't be made empty ");
            return;
        }

        /* Copy the data of next node to head */
        node.data = node.next.data;

        // store address of next node
        n = node.next;

        // Remove the link of next node
        node.next = node.next.next;

        // free memory
        System.gc();

        return;
    }

    // When not first node, follow the normal deletion process
    // find the previous node
    Node prev = node;
    while (prev.next != null && prev.next != n) {
        prev = prev.next;
    }

    // Check if node really exists in Linked List
    if (prev.next == null) {
        System.out.println("Given node is not present in Linked List");
        return;
    }

    // Remove node from Linked List
    prev.next = prev.next.next;

    // Free memory
    System.gc();

    return;
}

如果Java中的垃圾收集是自动的,我就无法看到显式调用System.gc()的意义。根据我的理解,对System.gc()的调用并不能保证垃圾收集器能够运行(就是这种情况?)。它只是一个概念含义吗?

谢谢!

0 个答案:

没有答案