删除一个 link 如何从 linked 列表中删除一个节点?
How does removing one link delete a node from a linked list?
我正在通读 Crashing the Coding Interview 一书中的代码,当他们删除第 93 页中的一个节点时,这是他们使用的代码片段:
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 节点仍然有一个 link 到它后面的节点,为什么这会删除前一个 n.next 节点?我附上插图帮助解释。
提前致谢!
- 在 languages/runtime 支持自动垃圾收集的情况下,此引用变量引用的对象(
b
- 无法从任何活动执行线程到达)将被垃圾收集。
- 即使在这种情况下,也应注意正确关闭任何外部资源(例如 - 有人将存储在
b
引用的对象中的值分配给他们的静态引用)。
- 在没有自动垃圾收集的运行时,开发人员有责任释放资源。
当我们使用 Java 编码时,包含 b 值的节点将被 Java 虚拟机 (JVM) 中的垃圾收集器 (GC) 删除。但是对于 C 语言,您应该使用 free() 函数销毁此节点。
这是在 C 中创建和销毁一个节点的示例(我们假设已经定义了“struct node”):
n = malloc(sizeof(struct node));
free(n);
我正在通读 Crashing the Coding Interview 一书中的代码,当他们删除第 93 页中的一个节点时,这是他们使用的代码片段:
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 节点仍然有一个 link 到它后面的节点,为什么这会删除前一个 n.next 节点?我附上插图帮助解释。
提前致谢!
- 在 languages/runtime 支持自动垃圾收集的情况下,此引用变量引用的对象(
b
- 无法从任何活动执行线程到达)将被垃圾收集。 - 即使在这种情况下,也应注意正确关闭任何外部资源(例如 - 有人将存储在
b
引用的对象中的值分配给他们的静态引用)。 - 在没有自动垃圾收集的运行时,开发人员有责任释放资源。
当我们使用 Java 编码时,包含 b 值的节点将被 Java 虚拟机 (JVM) 中的垃圾收集器 (GC) 删除。但是对于 C 语言,您应该使用 free() 函数销毁此节点。 这是在 C 中创建和销毁一个节点的示例(我们假设已经定义了“struct node”):
n = malloc(sizeof(struct node));
free(n);