数组解构赋值的特点

前提,在用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]
  1. 首先我们从数组解构赋值的定义说起:从数组里面根据模式匹配取出值赋值给变量
  2. 那么此时,我们可以直接把数组里面的值当做是常数,不受本次循环是变量的改变而改变
  3. 比如第一次循环,p就是null,c就是第一个节点,c.next就是第二个节点,那么第一步c.next=p之后,数组里的第三个值还是等于第二个节点,并不会受到第一次变量赋值是操作的影响而等于null.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值