【发布时间】:2018-03-25 01:52:49
【问题描述】:
这是基本代码
function ListNode(x) {
this.value = x;
this.next = null;
}
function linkedList(arr){
let list = new ListNode(arr[0]);
let selectedNode = list;
for(let i = 1; i < arr.length; i++){
selectedNode.next = new ListNode(arr[i]);
selectedNode = selectedNode.next
}
return list
}
l = [3, 1, 2, 3, 4, 5];
console.log(linkedList(l));
出于某种原因,它可以正常工作。我不明白 'list' 变量是如何在 linkedList(arr) 函数中更改/更新的。我看到 selectedNode = list,但 list 永远不会改变。 list 使用构造函数 new ListNode(arr[0]) 进行初始化,但在那之后,唯一改变的变量是 selectedNode。 list.next 甚至没有代码可以更改为某些内容。
那么返回列表是如何返回完整链表的呢?
【问题讨论】:
-
列表变量指向列表的头部。然后它设置 selectednode 也指向头部。通过设置选择节点旁边指向一个新节点,它正在更改列表指向的同一个顶部节点。这。 Selectnode 移动到新的下一个节点,并且它不断链接越来越多的节点。一直以来,列表仍然指向第一个节点。
-
selectedNode === list === new ListNode(arr[0]) -
这就是
LinkedList的工作原理,从概念上讲。您只需要一个指向 head 节点的指针。 list 将新节点设置为节点的next指针。所以最后你有一个链,你的head指向另一个节点,head.next指向另一个节点,这个节点再次指向带有next变量的某个节点,依此类推。您也可以在输出中清楚地看到这一点,它是一个嵌套结构。
标签: javascript