「这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战」。
题目描述
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例:假设链表为[1,2,3],则输出[3,2,1]
解题思路
先分析边界情况,如果链表为空或者只有一个节点,则无需反转可以直接返回。
假设链表为[1, 2, 3, 4, 5]
画图如下
我们定义一个虚拟初始存储节点,
1-->2-->3-->4-->5
分析一下反转后的结果,预期如下
5-->4-->3-->2-->1
即,2的下个节点为3,3的 下个节点为4...
即
因此,1.next = pre、2.next = 1、3.next = 2
所以我们需要再定义两个变量,current 和 next,根据现有条件可以得到当前节点以及当前节点的下个节点,只需要将当前节点的下个节点的指向变为当前节点,
反转到最后pre节点会一直存储到最后一个节点,因此返回pre即可
ps:对于常见的一些刷题的解法,其实是有“套路”的,虚拟头节点就是其中一种,当我们多练习整理出来这种方案之后,可以对许多同等类型的题目进行“套路”,多多练习,加油哦~~
代码实现
var reverseList = function (head) {
if (!head || !head.next) return head;
let pre = null;
let cur = head;
let next = head.next;
while (cur) {
cur.next = pre;
pre = cur;
cur = next;
if (next) next = next.next;
}
return pre;
};
以上就是反转链表的代码实现,其他相关链表题解可以查看作者历史文章,以下指路