Reverse Linked List II

MediumLinked List

Solution

import { ListNode } from '@algorithm/lib';
 
export function reverseBetween(
  head: ListNode | null,
  left: number,
  right: number,
): ListNode | null {
  if (head === null || left === right) {
    return head;
  }
 
  const reversed = new ListNode(0, head);
  let prevNode = reversed;
  for (let i = 0; i < left - 1; i++) {
    if (prevNode.next) {
      prevNode = prevNode.next;
    }
  }
 
  const currentNode = prevNode.next;
  for (let i = 0; i < right - left; i++) {
    if (currentNode && currentNode.next) {
      const nextNode = currentNode.next;
      currentNode.next = nextNode.next;
      nextNode.next = prevNode.next;
      prevNode.next = nextNode;
    }
  }
 
  return reversed.next;
}