标签:
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
Subscribe to see which companies asked this question
思路:归并排序
/**
* 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) {
if(lists.size() == 0) return NULL;
return mergeSort(lists,0,lists.size()-1);
}
ListNode *mergeSort(vector<ListNode*>& lists, int s, int e){
if(s==e) return lists[s];
else {
int mid = (s+e)>>1;
ListNode *l1 = mergeSort(lists,s,mid);
ListNode *l2 = mergeSort(lists,mid+1,e);
return merge(l1,l2);
}
}
ListNode *merge(ListNode *l1, ListNode *l2){
if(l1==NULL) return l2;
if(l2==NULL) return l1;
ListNode dummy(0);
ListNode *p = &dummy;
while(l1 && l2){
if(l1->val < l2->val){
p->next = l1;
l1=l1->next;
}
else {
p->next = l2;
l2=l2->next;
}
p = p->next;
}
p->next = l1!=NULL?l1:l2;
return dummy.next;
}
};标签:
原文地址:http://blog.csdn.net/itismelzp/article/details/51167618