/**
* 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;
}
};