1. 程式人生 > >LeetCode 21.合併兩個有序連結串列 C++程式碼實現

LeetCode 21.合併兩個有序連結串列 C++程式碼實現

題目描述:

將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。 

示例:

輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4

思路:這道題應該沒什麼大問題,分別比較兩個連結串列裡面的值的大小,然後放到新的連結串列中,最後把剩下未排完的連結串列全部放入。

程式碼實現:

/**
 * 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 = new ListNode(0);
        ListNode *a1=l1,*a2=l2;
        ListNode *a3=l3;
        while(a1&&a2){            //依次比較兩個連結串列中數的大小
            if(a1->val<=a2->val){
                a3->next=a1;
                a1=a1->next;
                a3=a3->next;
            }
            else{
                a3->next=a2;
                a2=a2->next;
                a3=a3->next;
            }
        }
        while(a1){        //若l1連結串列有剩餘,則全部放到最後
            a3->next=a1;
            a1=a1->next;
            a3=a3->next;
        }
        while(a2){        //若l2連結串列有剩餘,則全部放到最後
            a3->next=a2;
            a2=a2->next;
            a3=a3->next;
        }
        return l3->next;
    }
};