Partition List

MediumLinked ListTwo Pointers

Solution

import { ListNode } from '@algorithm/lib';
 
export function partition(head: ListNode | null, x: number): ListNode | null {
  const leftHead = new ListNode(-1);
  const rightHead = new ListNode(-1);
  let leftNode = leftHead;
  let rightNode = rightHead;
  let currentNode = head;
  while (currentNode !== null) {
    if (currentNode.val < x) {
      leftNode.next = currentNode;
      leftNode = leftNode.next;
    } else {
      rightNode.next = currentNode;
      rightNode = rightNode.next;
    }
    currentNode = currentNode.next;
  }
  leftNode.next = rightHead.next;
  rightNode.next = null;
  return leftHead.next;
}