leetcode23. Merge k Sorted Lists

来源:互联网 发布:巨库软件 编辑:程序博客网 时间:2024/06/04 19:11

leetcode23. Merge k Sorted Lists
思路:
用分治递归,在k=2的时候进行合并,利用leetcode21. Merge Two Sorted Lists中的方法

class Solution {public:    ListNode* mergeKLists(vector<ListNode*>& lists) {        if(lists.size()<=0) return NULL;        return mergeKLists(lists,0,lists.size() - 1);    }    ListNode* mergeKLists(vector<ListNode*>& lists,int start,int end){       if(start>=end){            return lists[start];        }        if(end - start==1){            return merge2Lists(lists,start,end);        }        int media = start + (end - start)/2;        ListNode *left = mergeKLists(lists,start,media);        ListNode *right = mergeKLists(lists,media+1,end);        vector<ListNode*> temp = {left,right};        return merge2Lists(temp,0,1);    }    ListNode* merge2Lists(vector<ListNode*>& lists,int start,int end){        ListNode* l1 = lists[start];        ListNode* l2 = lists[end];        ListNode *head1 = l1;        ListNode *head2 = l2;        ListNode *l3=new ListNode(0);        ListNode *h3 = l3;        while(head1!=NULL&&head2!=NULL){            if(head1->val<head2->val){                h3->next = head1;                head1 = head1->next;                h3 = h3->next;            }else{                h3->next = head2;                head2 = head2->next;                h3 = h3->next;            }        }        if(head1==NULL&&head2==NULL) {             h3->next = NULL;         }else if(head1==NULL) {                h3->next = head2;        }else if(head2==NULL) {             h3->next = head1;         }        return l3->next;    }};