function merge(head1, head2) {
let p1, p2, value
({ p1, p2, value } = getSmallestAndForward(head1, head2))
let head = new SingleLinkedNode(value)
let current = head
while (p1 || p2) {
({ p1, p2, value } = getSmallestAndForward(p1, p2))
current = current.next = new SingleLinkedNode(value)
}
return head
}