前提,在用js代码写翻转链表的时候
var reverseList = function(head) {
let [p, c] = [null, head]
while(c){
// c.next=p;
// p=c;
// c=c.next
[c.next, p, c] = [p, c, c.next]
}
return p
};
刚开始使用注释的三行写代码,但是显然是不可行的,因为当c.next=p,即是c.next=null,那么当即退出循环,那么怎么做到翻转链表的顺序呢?
方法一:可以加一个中间值next;如下:
其中p代表前一个,c代表现在,next代表下一个节点。
let next=c.next;
c.next=p;
p=c;
c=next
方法二:解构赋值,一句代码搞定
while (c) [c.next, p, c] = [p, c, c.next]
- 首先我们从数组解构赋值的定义说起:从数组里面根据模式匹配取出值赋值给变量
- 那么此时,我们可以直接把数组里面的值当做是常数,不受本次循环是变量的改变而改变
- 比如第一次循环,p就是null,c就是第一个节点,c.next就是第二个节点,那么第一步c.next=p之后,数组里的第三个值还是等于第二个节点,并不会受到第一次变量赋值是操作的影响而等于null.