题目描述
反转一个单链表。
示例
示例1:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
解题思路
题目的意思呢很简单,就是给定一个单链表,然后返回一个反转的链表, 那么这里就讲一下通过迭代的方法来反转链表。(本来想画图的,尝试了一下发现画的效果辣眼睛就没画了,哈哈)
- 首先常规操作肯定是要遍历一下链表的
- 将当前节点的 next 指针指向前一个节点,由于当前节点没有引用前一个节点,所以就需要将前一个节点存储起来,在更改下一个引用的节点前,也应该把下一个节点存储起来;
- 最后返回一个新的头引用。
假设 p 为当前节点,初始时为 head,即 1 ; pre 为前一个节点,起始为 null;
next 为当前节点指向的下一个节点,即 2 ;
这里就显示一次遍历,剩下的都一样。
比如链表: 1 -> 2 -> 3 -> 4 -> 5
遍历第一次的时候是这样的:
null <- 1 2 -> 3 -> 4 -> 5 ->
此时pre 变为了 1 ,p 变为了 2
pre 和 p 可以理解为都往前走了一步,直到 p 跳出循环,
最后返回的 pre 即为反转后的头节点
AC代码
var reverseList = function(head) {
let p = head
let pre = null // 保存上一个节点
while(p) {
let next = p.next // 保存下一个节点
p.next = pre // 让当前节点指向前一个节点
pre = p // 更新前一个节点
p = next // 更新当前节点
}
return pre
};
刷题记录
Leetcode152 三角关系解释环型链表||? | 刷题打卡
Leetcode15 史上最详细题解之三数之和 | 刷题打卡
Leetcode215 数组中第K个最大的元素 | 刷题打卡
总结
每次写题解的过程都是一次反省,加深印象的过程,能够将一个东西讲的通俗易懂,我觉得也是很厉害的,也不知道我讲清楚了没有,希望路过的各位 hxdm 在评论区告诉我呀,哈哈
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情