206.反转链表
1.题目描述
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
提示:
- 链表中节点的数目范围是 [0, 5000]
- -5000 <= Node.val <= 5000
2.解法
迭代解法
思路:改变指针的指向,使链表逆序
- 将pre节点初始化为null
- 将cur指针指向链表的头结点
- 保存cur节点的下一个节点next,稍后将改变cur的指向,以防丢失后续的节点
- 将cur的下一个节点指向他的前一个节点,即pre
- 重新为pre赋值,将其指向当前节点,即cur
- 重新为cur节点赋值为next
- 重复3456步骤,直到cur到达链表尾部
var reverseList = function(head) {
let pre = null
let cur = head
let next = cur?.next
while (cur) {
cur.next = pre
pre = cur
cur = next
next = cur?.next
}
return pre
};
递归解法
思路:递归法的思路由迭代法延伸而来,第一次递归的参数即为迭代法中pre和cur的初始值,之后每次进入递归就对应着迭代法中进入while循环,进入递归的参数就对应着迭代法中每次重新进入while循环的pre和cur的值。
相关讲解视频:点击查看b站超详细讲解视频
var reverse = function (pre, cur) {
if (cur === null) return pre
const temp = cur.next
cur.next = pre
return reverse(cur, temp)
}
var reverseList = function(head) {
return reverse(null, head)
};