【问题标题】:How does removing one link delete a node from a linked list?删除一个链接如何从链表中删除一个节点?
【发布时间】:2021-05-05 03:31:56
【问题描述】:

我正在阅读《Crashing the Coding Interview》一书中的代码,当他们在第 93 页删除一个节点时,这是他们使用的代码的 sn-p:

Node deleteNode(Node head, int d){ 

while (n.next != null) {

if (n.next.data == d){
  n.next == n.next.next;
  return head;
  }

return head;
  }
}

我不明白的是,如果前一个 n.next 节点仍然有指向它之后的节点的链接,为什么这会删除前一个 n.next 节点?我附上了帮助解释的插图。

提前致谢!

【问题讨论】:

  • b 不再被任何人引用,Java 对不再被引用的对象进行自动垃圾回收。所以b 将被丢弃,因为没有人链接它。因此,删除链接就足够了。

标签: java data-structures linked-list nodes singly-linked-list


【解决方案1】:
  1. 在支持自动垃圾回收的语言/运行时,此引用变量所引用的对象(b - 无法从任何活动的执行线程访问)将被垃圾回收。
  2. 即使在这种情况下,也应注意正确关闭任何外部资源(例如 - 有人将存储在由 b 引用的对象中的值分配给其静态引用)。
  3. 在没有自动垃圾收集的运行时中,开发人员有责任释放资源。

【讨论】:

    【解决方案2】:

    当我们使用 Java 编码时,包含 b 值的节点将被 Java 虚拟机 (JVM) 中的垃圾收集器 (GC) 删除。但是对于 C 语言,你应该使用 free() 函数来销毁这个节点。 这是在 C 中创建和销毁一个节点的示例(我们假设“结构节点”已经​​定义):

    n = malloc(sizeof(struct node));
    free(n);
    

    【讨论】:

      猜你喜欢
      • 2011-06-06
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 2012-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多