Example #1
0
struct ListNode* merge(struct ListNode** lists, int from, int to) {
	if (from == to) {
		return lists[from];
	} else if (to == from + 1) {
		return merge2List(lists[from], lists[to]);
	} else {
		int mid = (from + to) / 2;
		return merge2List(merge(lists, from, mid), merge(lists, mid + 1, to));
	}
}
Example #2
0
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        if (lists.size()==0) return NULL;
        if (lists.size()==1) return lists[0];

        int size=lists.size();
        int mid=(size)/2;
        vector<ListNode*> l11 = vector<ListNode*>(lists.begin(), lists.begin()+mid);
        ListNode* l1=mergeKLists(l11);
        vector<ListNode*> l22 = vector<ListNode*>(lists.begin()+mid, lists.end());
        ListNode* l2=mergeKLists(l22);

        ListNode* ret = merge2List(l1, l2);
        return ret;
    }
    ListNode *mergeKLists(vector<ListNode *> &lists) {
        if(lists.empty()) {
            return NULL;
        }

        int n = lists.size();
        while(n > 1) {
            int k = (n + 1) / 2;
            for(int i = 0; i < n / 2; i++) {
                lists[i] = merge2List(lists[i], lists[i + k]);
            }
            n = k;
        }
        return lists[0];
    }