为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这个JS解构赋值方法适用于反向单链表?

为什么这个JS解构赋值方法适用于反向单链表?

大话西游666 2019-04-16 13:15:56
我正在做一个leetcode问题反向单链表。我尝试了下面的代码,看看我是否错过了第1位的代码,结果会出错。我理解这是因为它失去了对它的引用current.next。(感谢这个stackoverflow帖子。)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};问题是,我发现下面显示的另一个代码也可以通过使用数组解构赋值(名称可能正确吗?),但我无法理解为什么这个工作没有使用另一个变量来保存引用current.next。var reverseList = function(head) {     let current = head;     let prev = null;     while (current) {         [current.next, prev, current] = [prev, current, current.next];//2     }     return prev};那么第2位的代码如何实际工作而不使用另一个变量来保存对current.next?的引用?
查看完整描述

2 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

[current.next, prev, current] = [prev, current, current.next]; 是一个数组解构语法,它可以在不显式保持tempvariable的情况下工作,因为引用保存在数组中


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


const arr = [];

arr[0] = prev;

arr[1] = current;

arr[2] = current.next;


current.next = arr[0];

prev = arr[1];

current = arr[2]

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


查看完整回答
反对 回复 2019-05-17
?
jeck猫

TA贡献1909条经验 获得超7个赞


使用解构赋值来交换变量不需要临时变量。


var a = 1;

var b = 3;


[a, b] = [b, a];

console.log(a); // 3

console.log(b); // 1

请参阅在MDN上使用Destructuring交换variablesSection

请参阅briosheje关于语言规范详细信息的答案中链接的ECMAScript文档。


查看完整回答
反对 回复 2019-05-17
  • 2 回答
  • 0 关注
  • 557 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号