Skip to content

206. 反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:

img

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2:

img

输入:head = [1,2]
输出:[2,1]

示例 3:

输入:head = []
输出:[]

提示:

  • 链表中节点的数目范围是 [0, 5000]
  • -5000 <= Node.val <= 5000

**进阶:**链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?

一、解法

typescript
// https://leetcode.cn/problems/reverse-linked-list/

import ListNode from "../1-data-structure/ListNode";
import SinglyLinkedList from "../1-data-structure/SinglyLinkedList";

function reverseList(head: ListNode | null): ListNode | null {
    if (head === null) return null;
    let reverseHead: ListNode = new ListNode(head.val, null);
    head = head.next;
    while (head) {
        reverseHead.next = new ListNode(reverseHead.val, reverseHead.next);
        reverseHead.val = head.val;
        head = head.next;
    }
    return reverseHead;
};

const linkedList = new SinglyLinkedList();
linkedList.append(5).append(4).append(3).append(2).append(1);

console.log(JSON.stringify(reverseList(linkedList.head), null, 4))

const linkedList1 = new SinglyLinkedList();
linkedList1.append(54).append(4).append(23).append(8).append(2);

console.log(JSON.stringify(reverseList(linkedList1.head), null, 4))