Link:: https://leetcode.com/problems/merge-two-sorted-lists/ up:: [[Leetcode MOC]] # Merge Two Sorted Lists ## Problem 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:** ![](https://assets.leetcode.com/uploads/2020/10/03/merge_ex1.jpg) **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 `list1` and `list2` are sorted in **non-decreasing** order. ## Solution ### Mine #### Python ```python # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]: if not list1: return list2 if not list2: return list1 dummy = ListNode() tail = dummy while list1 and list2: if list1.val <= list2.val: tail.next = list1 list1 = list1.next else: tail.next = list2 list2 = list2.next tail = tail.next if list1: tail.next = list1 elif list2: tail.next = list2 return dummy.next ``` #### Rust ### LC's ## Things I Learned ## Scratchpad Nested loop through lists? based on which is greater, update next of first? But that would mutate the list.