Javascript 链表-删除最后一个节点

Javascript 链表-删除最后一个节点,javascript,linked-list,Javascript,Linked List,我正在创建一个函数来删除给定列表的最后一个节点(作为参数输入)。函数本身非常简单,如下所示 function popBack(list) { var current = list.head, previous; while (current.next) { previous = current; current = current.next; } // console.log(current); // c

我正在创建一个函数来删除给定列表的最后一个节点(作为参数输入)。函数本身非常简单,如下所示

function popBack(list) {
    var current = list.head,
        previous;

    while (current.next) {
        previous = current;
        current = current.next;
    }

    // console.log(current);
    // console.log(previous.next);
    // current = null;
    // console.log(current);
    // console.log(previous.next);

    previous.next = null;
    return list;
}
由于列表中的下一个节点被其前面的节点引用,因此previous.next和current应指向同一对象。这就引出了我的问题。如果我将
current
设置为
null
,那么
previous.next
是否也等于
null
?与前面的
不同,现在的情况似乎不是这样。接下来的
仍然引用以前的
当前的
。谁能解释一下为什么会这样


提前感谢。

您说得对,前面的
是正确的。接下来的
和当前的
指向同一个对象。让我们将该对象称为
O
。就是

  • previous.next
    指向
    O
  • current
    指向
    O
运行以下代码时

current = null;
它不会将
O
设置为null,它只会更改
当前所指向的内容。也就是说,在
current=null之后已运行,这是新状态:

  • previous.next
    指向
    O
  • current
    指向
    null

上一个
是正确的。下一个
和当前
指向同一个对象。让我们将该对象称为
O
。就是

  • previous.next
    指向
    O
  • current
    指向
    O
运行以下代码时

current = null;
它不会将
O
设置为null,它只会更改
当前所指向的内容。也就是说,在
current=null之后已运行,这是新状态:

  • previous.next
    指向
    O
  • current
    指向
    null

新手常犯的一个错误是认为两个变量是相同的,当你改变一个变量时,你就改变了另一个变量。不过你说得对:它们都指向同一个物体。然后其中一个停止了指向。另一个在它的尖锐性上是不变的。如果你想让两个变量停止指向它们,你必须分别对这两个变量大喊大叫。正如Amadan所说,你实际上不是在删除对象,只是在更改
。下一步
引用。嘿,Amadan,非常感谢你的及时回复。我从您的回答中了解到,通过设置
current=null
,它将停止
current
指向与
previous.next
指向的同一对象。所以现在
current
指向一个没有值的新内存库。这是正确的吗?差不多,但不完全正确
null
是一个基本值:JS变量引用对象(您也可以说“包含对象引用”,尽管您实际上无法像从C中那样直接从JS中看到它们),但它包含基本值。因此,“
current
指向
null
”是不正确的;“
current
包含
null
”为空。由于包含
null
current
不再指向任何地方。一个非常常见的新手错误是认为两个变量是相同的,当你改变一个变量时,你就改变了另一个变量。不过你说得对:它们都指向同一个物体。然后其中一个停止了指向。另一个在它的尖锐性上是不变的。如果你想让两个变量停止指向它们,你必须分别对这两个变量大喊大叫。正如Amadan所说,你实际上不是在删除对象,只是在更改
。下一步
引用。嘿,Amadan,非常感谢你的及时回复。我从您的回答中了解到,通过设置
current=null
,它将停止
current
指向与
previous.next
指向的同一对象。所以现在
current
指向一个没有值的新内存库。这是正确的吗?差不多,但不完全正确
null
是一个基本值:JS变量引用对象(您也可以说“包含对象引用”,尽管您实际上无法像从C中那样直接从JS中看到它们),但它包含基本值。因此,“
current
指向
null
”是不正确的;“
current
包含
null
”为空。由于包含
null
current
不再指向任何地方。非常感谢您的快速回复。你的回答加强了我对阿马丹回答的回应。非常感谢你的快速回复。你的回答强化了我对阿马丹回答的反应。