Merge Two Sorted Lists
Problem statement
You are given the heads of two sorted linked lists list1 and list2.
Merge the two lists in a one sorted list. The list should be made by splicing together the nodes of the first two lists.
Return the head of the merged linked list.
Example 1:

Input: list1 = [1,2,4], list2 = [1,3,4]Output: [1,1,2,3,4,4]
Example 2:
Input: list1 = [], list2 = []Output: []
Example 3:
Input: list1 = [], list2 = [0]Output: [0]
Constraints:
- The number of nodes in both lists is in the range
[0, 50]. -100 <= Node.val <= 100- Both
list1andlist2are sorted in non-decreasing order.
My solution
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} list1
* @param {ListNode} list2
* @return {ListNode}
*/
var mergeTwoLists = function(list1, list2) {
let sorted = curr = new ListNode();
while (list1 || list2) {
const l1Val = list1 && list1.val;
const l2Val = list2 && list2.val;
if (l1Val === l2Val) {
curr.next = new ListNode(l1Val);
curr = curr.next;
curr.next = new ListNode(l2Val);
curr = curr.next
if (list1) {
list1 = list1.next;
}
if (list2) {
list2 = list2.next
}
} else if ((l1Val < l2Val && l1Val !== null) || l2Val === null ) {
curr.next = new ListNode(l1Val);
curr = curr.next;
if (list1) {
list1 = list1.next;
}
} else if ((l2Val < l1Val && l2Val !== null) || l1Val === null) {
curr.next = new ListNode(l2Val);
curr = curr.next;
if (list2) {
list2 = list2.next
}
}
}
return sorted.next;
};