---
description: Linked List
---

# LeetCode 21. Merge Two Sorted Lists



Merge two sorted linked lists and return it as a **sorted** list. The list should be made by splicing together the nodes of the first two lists.

**Example 1:**![](https://assets.leetcode.com/uploads/2020/10/03/merge_ex1.jpg)

```
Input: l1 = [1,2,4], l2 = [1,3,4]
Output: [1,1,2,3,4,4]
```

**Example 2:**

```
Input: l1 = [], l2 = []
Output: []
```

**Example 3:**

```
Input: l1 = [], l2 = [0]
Output: [0]
```

**Constraints:**

* The number of nodes in both lists is in the range `[0, 50]`.
* `-100 <= Node.val <= 100`
* Both `l1` and `l2` are sorted in **non-decreasing** order.

## Solution:

[English Version in Youtube](https://youtu.be/LsaQUAQacZA)

[中文版解答Youtube Link](https://youtu.be/Darw7d-fg6U)

[中文版解答Bilibili Link](https://www.bilibili.com/video/BV1EN41197Fo/)

```
class Solution {
public:
    ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
        ListNode *head = new ListNode(-1);
        ListNode *fake_head = head;
        
        while (l1 != nullptr || l2 != nullptr) {
            if (l1 == nullptr) {
                head->next = l2;
                break;
            } else if(l2 == nullptr) {
                head->next = l1;
                break;
            }
            
            if (l1->val <= l2->val) {
                head->next = l1;
                head = l1;
                l1 = l1->next;
            } else {
                head->next = l2;
                head = l2;
                l2 = l2->next;
            }
        }
        return fake_head->next;
    }
};
```
