JavaScript: 无法将第二个值添加到单链表
JavaScript: Can't add second value to singly linked list
我有以下包含值 [8,0,7]
的数组。我想为这些数组值构建一个单独的 linked 列表,以相同的顺序排序。
我为 linked 列表中的每个节点都有一个 ListNode
对象,其中包含值和 next
link 到 linked列表。我构建 linked 列表的代码目前如下所示:
for(let i=0; i<results.length; i++){
console.log("n:",results[i])
if(!result){
result = new ListNode(results[i])
}else{
console.log("else",results[i])
result.next = new ListNode(results[i]);
}
}
出于某种原因,结果 linked 列表仅添加 7
而不是 0
。
如果我没理解错的话,您希望通过单个引用按顺序 link ListNode
个对象,在这种情况下,您需要使用更新 result
引用最近 ListNode()
附加到 linked 列表,每次迭代:
/* Added to support code snippet */
function ListNode(value) {
this.value = value;
this.next = '';
}
/* Input data */
const results = [8, 0, 7];
/* Track the latest list node appended to the linked list (ie, the head) */
let result = "";
for (let i = 0; i < results.length; i++) {
if (!result) {
result = new ListNode(results[i])
}
else {
result.next = new ListNode(results[i]);
console.log(`${result.value} -> ${result.next.value}`);
/* Update result reference to newly appended list node */
result = result.next
}
}
另一种更简洁地表达这个 linking 过程的方法是 Array#reduce()
:
/* Added to support code snippet */
function ListNode(value) {
this.value = value;
this.next = '';
}
/* Reduce array to a linked list */
[8, 0, 7].reduce((prev, value) => {
/* Create node for current value */
const node = new ListNode(value);
/* If previous node exists, link it to current node */
if(prev) {
prev.next = node;
console.log(`${prev.value} -> ${node.value}`);
}
/* Return current node which will be the "previous" on
the next iteration */
return node;
}, "");
我有以下包含值 [8,0,7]
的数组。我想为这些数组值构建一个单独的 linked 列表,以相同的顺序排序。
我为 linked 列表中的每个节点都有一个 ListNode
对象,其中包含值和 next
link 到 linked列表。我构建 linked 列表的代码目前如下所示:
for(let i=0; i<results.length; i++){
console.log("n:",results[i])
if(!result){
result = new ListNode(results[i])
}else{
console.log("else",results[i])
result.next = new ListNode(results[i]);
}
}
出于某种原因,结果 linked 列表仅添加 7
而不是 0
。
如果我没理解错的话,您希望通过单个引用按顺序 link ListNode
个对象,在这种情况下,您需要使用更新 result
引用最近 ListNode()
附加到 linked 列表,每次迭代:
/* Added to support code snippet */
function ListNode(value) {
this.value = value;
this.next = '';
}
/* Input data */
const results = [8, 0, 7];
/* Track the latest list node appended to the linked list (ie, the head) */
let result = "";
for (let i = 0; i < results.length; i++) {
if (!result) {
result = new ListNode(results[i])
}
else {
result.next = new ListNode(results[i]);
console.log(`${result.value} -> ${result.next.value}`);
/* Update result reference to newly appended list node */
result = result.next
}
}
另一种更简洁地表达这个 linking 过程的方法是 Array#reduce()
:
/* Added to support code snippet */
function ListNode(value) {
this.value = value;
this.next = '';
}
/* Reduce array to a linked list */
[8, 0, 7].reduce((prev, value) => {
/* Create node for current value */
const node = new ListNode(value);
/* If previous node exists, link it to current node */
if(prev) {
prev.next = node;
console.log(`${prev.value} -> ${node.value}`);
}
/* Return current node which will be the "previous" on
the next iteration */
return node;
}, "");