Home algorithm - merge two sorted list
Post
Cancel

algorithm - merge two sorted list

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.

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.

Example:

1
2
Input: list1 = [1,2,4], list2 = [1,3,4]
Output: [1,1,2,3,4,4]

Solution

c++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
struct ListNode {
    int val;
    ListNode *next;

    ListNode() : val(0), next(nullptr) {}

    ListNode(int x) : val(x), next(nullptr) {}

    ListNode(int x, ListNode *next) : val(x), next(next) {}
};

ListNode *merge_two_sorted_list::mergeTwoLists(ListNode *list1, ListNode *list2) {
    if (list1 == nullptr) {
        return list2;
    }

    if (list2 == nullptr) {
        return list1;
    }

    ListNode* listNode = nullptr;
    ListNode* head = nullptr;
    while (true) {
        if (list1->val <= list2->val) {
            if (listNode == nullptr) {
                listNode = list1;
                head = list1;
            } else {
                listNode->next = list1;
                listNode = list1;
            }
            list1 = list1->next;
            if (list1 == nullptr) {
                listNode->next = list2;
                break;
            }
        } else {
            if (listNode == nullptr) {
                listNode = list2;
                head = listNode;
            } else {
                listNode->next = list2;
                listNode = list2;
            }
            list2 = list2->next;
            if (list2 == nullptr) {
                listNode->next = list1;
                break;
            }
        }
    }
    return head;
}

References

https://leetcode.com/problems/merge-two-sorted-lists/?envType=study-plan&id=level-1

This post is licensed under CC BY 4.0 by the author.