/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

/**
 * 
 * @param lists ListNode类一维数组 
 * @param listsLen int lists数组长度
 * @return ListNode类
 */
struct ListNode* mergeKLists(struct ListNode** lists, int listsLen ) {
    // write code here
    if(listsLen<=1)return *lists;
    struct ListNode*le=mergeKLists(lists,listsLen>>1);
    struct ListNode*ri=mergeKLists(lists+(listsLen>>1),listsLen-(listsLen>>1));
    struct ListNode*result=(struct ListNode*)malloc(sizeof(struct ListNode)),*templ,*tempr,*tempres=result;
    while(le!=NULL&&ri!=NULL)
    {
        if(le->val<ri->val)templ=le,le=le->next,tempres->next=templ;
        else tempr=ri,ri=ri->next,tempres->next=tempr;
        tempres=tempres->next;
    }
    if(ri!=NULL)tempres->next=ri;
    if(le!=NULL)tempres->next=le;
    return result->next;
}