Leetcode 21 solution c++

21. Merge Two Sorted Lists

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:

Merge Two Sorted Lists
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:


Following is the c++ solution of the above problem : 

 /**
 * 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*list3 = new ListNode();
        ListNode*temp = list3;
        
           while(list1 != NULL && list2 != NULL)
           {
               if(list1->val == list2->val)
               {
                   list3 ->next = list1;
                   list1 = list1->next;
                  list3 = list3->next;
                   list3->next = list2;
                   list2= list2->next;
                  list3 = list3->next;
                   
               }
               else
               if(list1->val > list2->val)
               {
                   list3->next = list2;
                   list2= list2->next;
                   list3 = list3->next;

               }
               else
               {
                   list3->next = list1;
                   list1 = list1->next;
                  list3 = list3 ->next;
               }
           }
          while(list1 != NULL)
          {
              list3->next = list1;
                   list1 = list1->next;
              list3 = list3 ->next;
          }
         while(list2 != NULL)
         {
           list3->next = list2;
            list2= list2->next;
                 list3 = list3->next;
         }
        
        return temp->next;
    }
};

Comments