Написано: 28.02.2023

21. Объединить два отсортированных списка (Merge Two Sorted Lists)

easy

Задание.

Даны заголовки двух отсортированных связанных списков list1 и list2.

Нужно объединить два списка в один отсортированный список. Список должен быть составлен путем соединения вместе узлов первых двух списков.

Необходимо вернуть заголовок объединенного связанного списка.

Пример 1.

LeetCode-000021

Входные данные: list1 = [1,2,4], list2 = [1,3,4]

Результат: [1,1,2,3,4,4]

Пример 2.

Входные данные: list1 = [], list2 = []

Результат: []

Пример 3.

Входные данные: list1 = [], list2 = [0]

Результат: [0]

Решение.

/**
 * Definition for singly-linked list.
 * 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) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        ListNode dummy, *temp;
        temp = &dummy;
        
        while(list1 && list2){
            if(list1->val < list2->val){
                temp->next = list1;
                list1 = list1->next;
            }
            else{
                temp->next = list2;
                list2 = list2->next;   
            }
            temp = temp->next;
        }
        
        if(list1) temp->next = list1;
        if(list2) temp->next = list2;
        
        return dummy.next;
    }
};