Insertion Sort List

MediumLinked ListSorting

Solution

import { ListNode } from '@algorithm/lib';
 
export function insertionSortList(head: ListNode | null): ListNode | null {
  if (head === null) {
    return null;
  }
 
  const startNode = new ListNode(-1);
  let prevNode = startNode;
  let currNode: ListNode | null = head;
  let nextNode = currNode.next;
 
  while (currNode !== null) {
    nextNode = currNode.next;
    while (prevNode.next !== null && prevNode.next.val < currNode.val) {
      prevNode = prevNode.next;
    }
    currNode.next = prevNode.next;
    prevNode.next = currNode;
    prevNode = startNode;
    currNode = nextNode;
  }
 
  return startNode.next;
}