1. 程式人生 > >合併兩個有序連結串列(LeetCode 21. Merge Two Sorted Lists)

合併兩個有序連結串列(LeetCode 21. Merge Two Sorted Lists)

雙指標連結串列解法:
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        ListNode *l3=NULL;
        ListNode *p1;
        ListNode *p2;
    
        while((l1!=NULL)&&(l2!=NULL))
        {
            if(l1->val  <  l2->val){
                
                if(l3==NULL)
                {
                    p1=(ListNode *)malloc(sizeof(ListNode));    //再重申請一個節點 
                    
                    p1->val=l1->val;
                    l3=p1;
                    p2=p1;
                        
                    l1=l1->next;
                    
                }
                else{
                     p1=(ListNode *)malloc(sizeof(ListNode));    //再重申請一個節點 
                    
                    p1->val=l1->val;
                    p2->next=p1;
                    p2=p1;
                        
                    l1=l1->next;
                }
                p2->next=NULL;
                   
            }
            else
            {
                 if(l3==NULL){
                     p1=(ListNode *)malloc(sizeof(ListNode));    //再重申請一個節點 
                    
                    p1->val=l2->val;
                    l3=p1;
                    p2=p1;
                        
                    l2=l2->next;
                    
                }
                else{
                     p1=(ListNode *)malloc(sizeof(ListNode));    //再重申請一個節點 
                    
                    p1->val=l2->val;
                    p2->next=p1;
                    p2=p1;
                        
                    l2=l2->next;
                }
                p2->next=NULL;
                
            }
        }
        
        if(l1!=NULL){
            if(l3==NULL){
                l3=l1;
            }
            else
                p2->next=l1;
        }
        if(l2!=NULL){
            if(l3==NULL)
                l3=l2;
            else
                p2->next=l2;
        }
        
        return l3;
        
        
        
    }
};