gpt4 book ai didi

javascript - 为什么这个JS的解构赋值方法对单链表的反转有效?

转载 作者:行者123 更新时间:2023-11-30 19:33:44 25 4
gpt4 key购买 nike

我正在做一道 leetcode 题 reverse singly linked list .

我尝试了下面的代码,看看我是否错过了第 1 处的代码,结果会出错。我理解这是因为它丢失了对 current.next 的引用。 (感谢这个 stackoverflow post 。)

function ListNode(val) {
this.val = val;
this.next = null;
}
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function(head) {

let current = head;
let prev = null;
while (current) {

current.next = prev;
prev = current;
current = current.next;

//The right one
// let save = current.next; //1
// current.next = prev;
// prev = current;
// current = save;

}

return prev
};

问题是,我发现下面显示的另一个代码也可以通过使用数组解构赋值来工作(也许名称正确?),但我不明白为什么不使用另一个变量来保存对 的引用就可以工作当前.下一个

var reverseList = function(head) {

let current = head;
let prev = null;
while (current) {
[current.next, prev, current] = [prev, current, current.next];//2
}

return prev
};

那么在不使用另一个变量保存对 current.next 的引用的情况下,位置 2 的代码如何实际工作?

最佳答案

[current.next, prev, current] = [prev, current, current.next]; 是一种数组解构语法,它无需显式保留临时变量即可工作,因为引用保存在数组

你可以把上面的代码想象成

const arr = [];
arr[0] = prev;
arr[1] = current;
arr[2] = current.next;

current.next = arr[0];
prev = arr[1];
current = arr[2]

原始元素的引用保存在数组中而不是单个变量中

关于javascript - 为什么这个JS的解构赋值方法对单链表的反转有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56170007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com