1. 程式人生 > >劍指offer--合併兩個排序的連結串列

劍指offer--合併兩個排序的連結串列

題目描述

輸入兩個單調遞增的連結串列,輸出兩個連結串列合成後的連結串列,當然我們需要合成後的連結串列滿足單調不減規則。

解析

將兩個連結串列排序插入vector陣列中,再新建一條連結串列。這種方法需要新的空間,可以考慮將兩個連結串列連起來,按陣列順序重新賦值,但是又會改變原來的兩個連結串列,所以一開始的思路應該還行。

class Solution {
public:
    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
    {
        if(pHead1==NULL)return pHead2;
        if(pHead2==NULL)return pHead1;
        vector<int> temp;
        while(pHead1||pHead2){
            if(pHead1==NULL){
                temp.push_back(pHead2->val);
                pHead2 = pHead2->next;
            }else if(pHead2==NULL){
                temp.push_back(pHead1->val);
                pHead1 = pHead1->next;
            }else if(pHead1->val>=pHead2->val){
                temp.push_back(pHead2->val);
                pHead2 = pHead2->next;
            }else if (pHead1->val<pHead2->val){
                temp.push_back(pHead1->val);
                pHead1 = pHead1->next;
            }
        }
        ListNode* result;
        result = (ListNode*)malloc(sizeof(ListNode));
        result->val = temp[0];
        result->next = NULL;
        ListNode* a = result;
        for(int i=1;i<temp.size();++i){
            ListNode* newnode;
            newnode = (ListNode*)malloc(sizeof(ListNode));
            newnode->val = temp[i];
            newnode->next = NULL;
            result->next = newnode;
            result = newnode;
        }
        return a;
    }
};