# Merge Two Sorted Lists - Company-specific OAs / Amazon OA

Dude where’s the javascript for these problems

agree with needing more js solutions on this site

Solution using Min Heap:

``````public static Node<Integer> merge(Node<Integer> l1, Node<Integer> l2) {
PriorityQueue<Node<Integer>> pq = new PriorityQueue<>((a, b) -> {
return a.val.compareTo(b.val);
});

if (l1 != null)
if (l2 != null)

Node tail = null;

while (!pq.isEmpty()) {
Node curr = pq.poll();

} else {
tail.next = curr;
tail = tail.next;
}

if (curr.next != null) {
}
}

}``````

It’s useful while merging k sorted lists. Simple loop gives better time complexity for two lists.

``````
// Iterative version.

const merge = (l1, l2) => {

let dummy = new Node(-1);
const result = dummy;
let current_1 = l1;
let current_2 = l2;

while (current_1 && current_2) {
if (current_1.val < current_2.val) {
dummy.next = current_1;
current_1 = current_1.next;
} else {
dummy.next = current_2;
current_2 = current_2.next;
}

dummy = dummy.next;
}

// if still one of the list has elements.
if (current_1)  dummy.next  = current_1;
if (current_2)  dummy.next  = current_2 ;

return result.next
}

``````

For the recursive version.

``````
const merge = (l1, l2) => {

if (l1 === null && l2 === null) return null;
if (l1 === null) return l2
if (l2 === null) return l1

if (l1.val < l2.val) {
const next = l1.next
l1.next = merge(next, l2)
return l1
} else {
const next = l2.next
l2.next = merge(l1, next)
return l2
}

}
``````