21. Merge Two Sorted Lists [E] merging two sorted linked list

topic

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
Example:
 Input:1->2->4, 1->3->4
 Output:1->1->2->3->4->4


Thinking

A thought: to create a new list

Establish a new list, to save the result of the merger. In order to facilitate insertion of the list, the definition of a temporary node, otherwise every time traversed to the end node insertion.

Thinking two: recursion

  • Recursive termination condition:
    where a list is empty
  • Recursion
    • If l1-> val <= l2-> next val, will be referred to as a node l1 l1-> next merged list and l2
    • If l1-> val> l2-> val, the next node will remember l2 is l2-> next merged with l1 list

      Figure 1: two lists
![](https://i.loli.net/2019/05/22/5ce506510660213051.jpg)
Figure 2: the first recursive
![](https://i.loli.net/2019/05/22/5ce50666dbb1b64155.jpg)
Figure 3: a second recursive

C++

  • A thought
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        
        if(l1 == nullptr)
            return l2;
        if(l2 == nullptr)
            return l1;
        
        ListNode* result = new ListNode(0) ;
            
        ListNode* temp = result;
        
        while(l1 != nullptr && l2 != nullptr){
            
            if(l1->val <= l2->val){
                temp ->next = l1;
                l1 = l1 -> next;
            }
            else{
                temp -> next =l2;
                l2 = l2 ->next;
            }
            temp = temp ->next;
        }
        
        if(l1 == nullptr)
            temp -> next = l2;
        else
            temp -> next =l1;
        
        return result -> next;
    }
  • Ideas two
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        
        if(l1 == nullptr)
            return l2;
        if(l2 == nullptr)
            return l1;
        
       if(l1->val <= l2->val){
           l1->next = mergeTwoLists(l1->next ,l2);
           return l1;
       }
        else{
           l2->next = mergeTwoLists(l2->next ,l1);
           return l2; 
        }
    }

Python

Guess you like

Origin www.cnblogs.com/Jessey-Ge/p/10993514.html