/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *mergeKLists(vector<ListNode *> &lists) {
        if(lists.empty())
            return NULL;
        auto res = merge(lists);
        return res[0];
    }
// 具体思想:先将lists数组后面的两个链表进行合并,然后当lists数组中的元素只有一个时,返回lists数组
    vector<ListNode* > merge(vector<ListNode* >& lists) {
        if(lists.size() < 2)
            return lists;
        int n = lists.size();
        auto l1 = lists[n - 1], l2 = lists[n - 2];
        ListNode* head = new ListNode(-1);
        auto l = head;
        lists.pop_back();
        lists.pop_back();
        while(l1 && l2) {
            if(l1->val < l2->val) {
                auto q = new ListNode(l1->val);
                l->next = q;
                l1 = l1->next;
            }
            else {
                auto q = new ListNode(l2->val);
                l->next = q;
                l2 = l2->next;
            }
            l = l->next;
        }
        while(l1) {
            auto q = new ListNode(l1->val);
            l->next = q;
            l1 = l1->next;
            l = l->next;
        }
        while(l2) {
            auto q = new ListNode(l2->val);
            l->next = q;
            l2 = l2->next;
            l = l->next;
        }
        lists.push_back(head->next); // 将合并的链表存入队列
        merge(lists);
        return lists;
    }
};