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)); } }
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]; }