劍指offer--合併兩個排序的連結串列
阿新 • • 發佈:2018-12-13
題目描述
輸入兩個單調遞增的連結串列,輸出兩個連結串列合成後的連結串列,當然我們需要合成後的連結串列滿足單調不減規則。
解析
將兩個連結串列排序插入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; } };