多個有序的連結串列合併
阿新 • • 發佈:2019-01-29
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* mergeKLists(vector<ListNode*>& lists) { ListNode * pRes = NULL; for(int i=0; i<lists.size(); i++) { pRes = mergeTwoLists(pRes, lists[i]); } return pRes; } ListNode* mergeTwoLists(ListNode * list1, ListNode * list2) { if(list1 == NULL && list2 == NULL) return NULL; else if(list1 == NULL) return list2; else if(list2 == NULL) return list1; ListNode * pLast = new ListNode(0); ListNode * pres = new ListNode(0); pLast = pres; while(list1 != NULL && list2 != NULL) { if(list1->val > list2->val) { pres->next = list2; list2 = list2->next; pres = pres->next; pres->next = NULL; } else { pres->next = list1; list1 = list1->next; pres = pres->next; pres->next = NULL; } } if(list1 != NULL) { pres->next = list1; } if(list2 != NULL) { pres->next = list2; } return pLast->next; } };