Appearance
206. 反转链表
原题链接:LeetCode 206. 反转链表
题目描述
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
**输入:**head = [1,2,3,4,5] 输出:[5,4,3,2,1]
示例 2:
**输入:**head = [1,2] 输出:[2,1]
示例 3:
**输入:**head = [] 输出:[]
提示:
- 链表中节点的数目范围是 `[0, 5000]`
-5000
**进阶:**链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?
难度: Easy
题解代码
javascript
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = head => {
let cur = head
let prev = null
while (cur !== null) {
const next = cur.next // 缓存next
cur.next = prev // 反转
prev = cur // 右移prev
cur = next // 右移cur
}
return prev
}
// 递归 栈内存消耗大
var reverseList = function(head) {
if (!head || !head.next) return head
const cur = reverseList(head.next)
head.next.next = head
head.next = null
return cur
};