206. Reverse Linked List (Easy) (https://leetcode.com/problems/reverse-linked-list/)

Given the head of a singly linked list, reverse the list, and return the reversed list. Constraints: - The number of nodes in the list is in the range [0, 5000].

  • -5000 <= Node.val <= 5000 Follow up: A linked list can be reversed either iteratively or recursively. Could you implement both?
class ListNode {
  val: number;
  next: ListNode | null;
  constructor(val?: number, next?: ListNode | null) {
    this.val = val === undefined ? 0 : val;
    this.next = next === undefined ? null : next;
  }
}
 
function reverseList(head: ListNode | null): ListNode | null {
  if (head === null) return null;
 
  let prev: ListNode | null = null;
  let current: ListNode | null = head;
 
  while (current !== null) {
    const next: ListNode | null = current.next; // запоминаем следующий узел
    current.next = prev; // разворачиваем ссылку
    prev = current; // двигаем prev
    current = next; // переходим дальше
  }
 
  return prev;
}
 
// Local check:
const list1 = new ListNode(
  1,
  new ListNode(2, new ListNode(3, new ListNode(4, new ListNode(5)))),
);
console.log(reverseList(list1)); // [5,4,3,2,1]
 
const list2 = new ListNode(1, new ListNode(2));
console.log(reverseList(list2)); // [2,1]
 
console.log(reverseList(null)); // []
Example 1:
 
    Input: head = [1,2,3,4,5]
    Output: [5,4,3,2,1]
 
  Example 2:
 
    Input: head = [1,2]
    Output: [2,1]
 
  Example 3:
 
    Input: head = []
    Output: []

linked-list 876-middle-of-the-linked-list leetcode