[路飞]_反转链表

120 阅读1分钟

将链表反转

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

解题思路

  • 一条链子就是一环扣这另一环
  • 那我们想要把这条链子反转过来就需要把扣着自己的那一环变成自己扣着的那一环
  • 同样的把一个链表看成一条链子就需要把只想自己的节点变成自己指向的节点

代码如下

var reverseList = function(head) {
    //判断这个链是否有值,没有直接返回Null
    if(!head) return null;
    let pre = null, cur = head;
    while (cur) {
        //将当前节点的子节点放在保存一下
        let next = cur.next;
        //让当前节点的地址指向新生成链表的头部节点
        cur.next = pre;
        //新链表就由当前节点开始
        pre = cur;
        //原链表的起始位置就变成下一个节点
        cur = next;
    }
    return pre
};

这样我们就实现了链表的反转,此时我们发现while循环中的内容前端可以通过解构赋值实现

新代码如下:

var reverseList = function(head) {
    if(!head) return null;
    let pre = null, cur = head;
    while (cur) {
        [cur.next, pre, cur] = [pre, cur, cur.next]
    }
    return pre
};