[路飞]_LeetCode剑指Offer24.反转链表

125 阅读1分钟

「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战

LeetCode 剑指 Offer 24. 反转链表

拙劣的画图手法见笑

示例
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
思路
1. 首先我们需要定义两个指针

let pre = null; // 指向当前节点的前一个节点
let cur = head; // 当前节点
2.改变当前节点的指向,令它指向它的前一个节点

这个时候要改变链表的指向,就要断开之前的指向,重新指向一个新的指向,所以要用一个变量保存来下之后的节点

let temp = head.next; // 保存剩余的节点cur.next = pre; // 改变当前节点的指向为前一个节点
3.把当前的节点赋值给前一个节点,然后把剩余的节点赋值给当前节点(向后遍历一下)

这里由黑色的pre和cur 变为 红色的pre和cur

pre = cur;
cur = temp;
4.然后再次改变当前节点的指向,并且把剩余的节点用temp保存下来

5.最后走完全部,完成反转链表

完整代码

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