链表替换和删除



我想从链表中删除节点,只给出要删除的节点。 这是函数:

function deleteNode(node) {
if (!node.next)throw new Error()
node.value = node.next.value
node.next=node.next.next
}

我的问题是为什么我不能这样做? 我知道它不起作用,但为什么呢?

function deleteNode(node) {
if (!node.next)throw new Error()
node = node.next
}

有一个由3 个节点组成的链 前一个 -> 当前(删除(->下一个。

函数中的node引用要删除的节点对象。对实际节点的另一个引用是来自前一个节点的引用。要删除节点,您需要删除对前一个节点的引用。

node重新分配给node.next只会替换存储在临时node参数中的引用,但不会更改上一个或当前节点。

在这种情况下,代码通过将节点的内容替换为下一个节点的内容来"删除"节点。由于删除了对下一个节点的引用,因此下一个节点实际上将从列表中删除(如果没有其他引用,则进行垃圾回收(。但是,该值将保留。这不是当前节点的实际删除(原始对象仍然存在(。

如果要删除实际的节点对象,而不是替换其内容,则需要遍历链表。当您到达上一个节点(具有指向要删除的节点的next属性的节点(时,将其next属性更改为已删除的节点next属性。

相关内容

  • 没有找到相关文章