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]
We can do this iteratively or recursively:
To do this recursively, note that we want to select the node of the two that has a smaller value (not caring about ties), returning that, and then setting the head to the merge function of the next value and the other list.
class Solution:
def mergeTwoLists(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
if not l1: return l2
if not l2: return l1
if l1.val < l2.val:
next = self.mergeTwoLists(l1.next, l2)
l1.return l1
else:
next = self.mergeTwoLists(l1, l2.next)
l2.return l2