gpt4 book ai didi

java - 从链表 LUT 中删除节点?

转载 作者:行者123 更新时间:2023-11-30 05:53:22 26 4
gpt4 key购买 nike

我们正在尝试编写一种方法来从 LUT 的链表实现中删除具有特定键的节点。

我写的代码总结:

public void delete (String k) {

Node currNode = listHead;
Node prevNode = listHead;

Key key = new Key (k);

while (!currNode.key.equals(k) && currNode != null){
prevNode = currNode;
currNode = currNode.next;
}

if (currNode == listHead) {
listHead = listHead.next;
} else {
prevNode.next = currNode.next;
}
}

我的 friend 基本上写了同样的东西,但没有使用先前的节点指针,而是写成他的最后一行:

currNode = currNode.next //detach point, override

这两个是等价的吗?我认为我对 Java 内存管理感到困惑。
如果您已经在其他地方创建了 listHead 节点,并且您这样写:

Node currNode = listHead;

currNode 仅存储对存储 listHead 的内存位置的引用,对吧?所以在 while 循环中,当你执行 currNode = currNode.next 时,你正在做的是转到 currNode 中引用的内存位置并查看变量 next 和将对该内存位置的引用存储在 currNode 中?所以基本上是更新 currNode 指向的位置。这意味着我 friend 的密码是错误的,对吧?因为他的代码同样意味着:“用 currNode.next 的内存位置更新当前在 currNode 中的引用”。

有人介意帮我除雾吗?

最佳答案

你的 friend 不可能是对的,因为必须更改 Node.next 字段才能从列表中删除 Node .

我想您知道,要从列表中删除节点 N,您需要将节点 N-1.next 字段设置为引用节点 N+1。您 friend 的方法不可能这样做,因为它没有更改任何节点的 .next 字段。

至于内存,一旦N-1.next字段引用了N+1,那么N 不再由列表保持 Activity 状态。它是否符合垃圾收集条件取决于程序中是否有任何其他内容引用了它。但这份名单现在已经洗白了。

关于java - 从链表 LUT 中删除节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10608789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com