You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

循环修改链表结构后,如何生成初始链表的独立实例并保存?

循环修改链表结构后,如何生成初始链表的独立实例并保存?

嘿,我一眼就看出问题出在哪啦!你现在的代码里,所有循环都在同一个链表实例上操作——那个一开始创建的square变量是固定的,每次循环只是在它后面不断加新节点,然后把这个不断变长的同一个链表多次push到数组里,最后数组里当然全是指向同一个长链表的引用啦。

要解决这个问题,核心就是每次循环都创建一个全新的初始链表,而不是复用同一个老链表。具体来说,你需要把初始的square节点的创建逻辑放进循环里,让每一轮循环都从一个新的[0, 0]节点开始,再追加当前的数组元素,最后把这个独立的短链表存进结果数组。

修改后的代码大概是这样的:

class Square {
  constructor() {
    this.value = null;
    this.next = null;
  }
}

let arrayOfValues = [[1,2], [2, 3], [4, 5]];
let resultArray = [];

arrayOfValues.forEach(v => {
  // 每次循环都创建一个全新的初始节点
  let square = new Square();
  square.value = [0, 0];
  
  // 给这个新链表追加当前节点
  let copy = square;
  let nextNode = new Square()
  nextNode.value = v;
  copy.next = nextNode;
  
  // 把这个独立的短链表存进数组
  resultArray.push(square);
})

console.log(resultArray)
// 现在输出就是你想要的:[{value: [0, 0], next: {value: [1, 2], next: null}}, ...]

简单解释下改动点:

  • 把初始square的创建从循环外移到了循环内,这样每一轮循环都会生成一个完全独立的新链表根节点
  • 每一轮循环只给当前的新链表追加一个节点,所以每个链表都是[0,0] -> 当前v -> null的结构
  • 最后push到数组里的都是各自独立的链表实例,互相之间没有关联

这样就能完美得到你想要的结果啦!

备注:内容来源于stack exchange,提问作者anu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 16:18:00