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
不再指向任何地方。非常感谢您的快速回复。你的回答加强了我对阿马丹回答的回应。非常感谢你的快速回复。你的回答强化了我对阿马丹回答的反应。