Задача

Дан односвязный список. Необходимо развернуть его в обратном порядке и вернуть новую голову списка.

// Структура узла
function ListNode(val, next) {
    this.val = (val === undefined ? 0 : val);
    this.next = (next === undefined ? null : next);
}
 
// Способ 1: Создание вручную
let head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
head.next.next.next.next = new ListNode(5);
// Структура узла двусвязного списка
function DoublyListNode(val, prev, next) {
    this.val = (val === undefined ? 0 : val);
    this.prev = (prev === undefined ? null : prev);
    this.next = (next === undefined ? null : next);
}

Примеры

Пример 1

Input: head = [1,2,3,4,5]
Output: [5,4,3,2,1]

Пример 2

Input: head = [1,2]
Output: [2,1]

Пример 3

Input: head = []
Output: []

Решение