Skip to content
On this page

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
};

技术文档集合