循环修改链表结构后,如何生成初始链表的独立实例并保存?
循环修改链表结构后,如何生成初始链表的独立实例并保存?
嘿,我一眼就看出问题出在哪啦!你现在的代码里,所有循环都在同一个链表实例上操作——那个一开始创建的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
相关产品推荐
相关产品推荐

