链表归并
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* merge(ListNode* l1, ListNode* l2){
ListNode *dummyHead = new ListNode(-1);
ListNode *p = dummyHead;
while(l1 != NULL && l2 != NULL){
if(l1 -> val <= l2 -> val) p -> next = new ListNode(l1 -> val), l1 = l1 -> next;
else p -> next = new ListNode(l2 -> val), l2 = l2 -> next;
p = p -> next;
}
while(l1 != NULL){
p -> next = new ListNode(l1 -> val);
l1 = l1 -> next;
p = p -> next;
}
while(l2 != NULL){
p -> next = new ListNode(l2 -> val);
l2 = l2 -> next;
p = p -> next;
}
return dummyHead -> next;
}
ListNode* mergeLists(vector<ListNode*> & lists, int left, int right){
if(left < right){
int mid = left + (right - left) / 2;
ListNode* pLeft = mergeLists(lists, left , mid);
ListNode* pRight = mergeLists(lists, mid + 1, right);
return merge(pLeft, pRight);
}
if(left == right) return lists[left];
return NULL;
}
ListNode *mergeKLists(vector<ListNode *> &lists) {
return mergeLists(lists, 0, lists.size() - 1);
}
}; 
京公网安备 11010502036488号