「这是我参与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;
};