「LeetCode系列」反转链表|刷题打卡

99 阅读1分钟

1.题目描述

反转一个单链表. 题目链接: 206.反转链表

示例

输入:  1 -> 2 -> 3 -> 4 -> 5 -> NULL  
输出:  5 -> 4 -> 3 -> 2 -> 1 -> NULL

2.思路分析

首先需要三个变量,第一个 pre 指向 NULL ,然后 cur 指向输入链表的头节点, next 指向头结点的下一个节点; 第一步:将 cur 的下一个节点指向 pre, 再将 pre 指向 cur ,效果就相当于把 cur 节点转移到 pre 链表上,然后将 cur 指向 next, next 指向 next 的下一个节点,然后当前的状态就相当于最开始的状态,且 pre 链表添加了新节点. 然后重复第一步,最后如果 cur 指向 NULL,说明输入链表已经循环完成.而 pre 就是我们要输出的链表.

效果图:

反转链表.gif

3.代码

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

代码优化: 可使用解构赋值

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;
};