Skip to main content

Merge Two Sorted Lists

Given the heads of two sorted linked lists, merge them into one sorted list and return its head. The merge must be done in-place, by re-linking the existing nodes.

Input:  list1 = [1, 2, 4], list2 = [1, 3, 4]
Output: [1, 1, 2, 3, 4, 4]
Explanation: Nodes are merged in sorted order.
export class ListNode {
val: number;
next: ListNode | null;

constructor(val?: number, next?: ListNode | null) {
this.val = val ?? 0;
this.next = next ?? null;
}
}

export function mergeTwoLists( list1: ListNode | null, list2: ListNode | null): ListNode | null {
const dummy = new ListNode();
let tail = dummy;

while (list1 !== null && list2 !== null) {
if (list1.val < list2.val) {
tail.next = list1;
list1 = list1.next;
} else {
tail.next = list2;
list2 = list2.next;
}
tail = tail.next;
}

tail.next = list1 !== null ? list1 : list2;

return dummy.next;
}