/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param lists ListNode类一维数组
* @param listsLen int lists数组长度
* @return ListNode类
*/
struct ListNode* merger(struct ListNode** lists, int listsLen, int left, int right) {
if(left == right) return lists[left];
else {
int mid = left + (right - left) / 2;
struct ListNode* leftHead = merger(lists, listsLen, left, mid);
struct ListNode* rightHead = merger(lists, listsLen, mid + 1, right);
struct ListNode* newHead = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* pre = newHead, *p1 = leftHead, *p2 = rightHead;
while(p1 && p2) {
if(p1->val < p2->val) {
pre->next = p1;
pre = p1;
p1 = p1->next;
} else {
pre->next = p2;
pre = p2;
p2 = p2->next;
}
}
if(p1) {
pre->next = p1;
} else if(p2) {
pre->next = p2;
}
pre = newHead->next;
free(newHead);
return pre;
}
}
struct ListNode* mergeKLists(struct ListNode** lists, int listsLen ) {
// write code here
if(listsLen == 0) return NULL;
return merger(lists, listsLen, 0, listsLen - 1);
}