Javascript 链表的替换和删除

Javascript 链表的替换和删除,javascript,linked-list,Javascript,Linked List,如果只指定要删除的节点,我想从链表中删除节点。 以下是函数: 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() n

如果只指定要删除的节点,我想从链表中删除节点。 以下是函数:

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个节点组成的链:上一个->当前(要删除)->下一个

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

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

本例中的代码通过将节点的内容替换为下一个节点的内容来“删除”节点。由于删除了对下一个节点的引用,下一个节点实际上将从列表中删除(如果没有其他引用,则会进行垃圾收集)。然而,价值将保持不变。这不是对当前节点的实际删除(原始对象仍然存在)


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

您说过我将只替换存储在临时节点中的引用,但该节点如何是临时的?此外,如果它是临时的,那么更改它的值和下一步是否也是临时的?它不是临时节点,而是名为
节点
的临时变量,它引用了一个对象。替换
节点
变量包含的内容时,不会更改实际对象。设置
node=5
不会将实际节点转换为5。