通过两个链表相互融合,
注意如果是单数total,total=total/2+1;并且lists[total/2]=lists[total-1]
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* mergeKLists(vector<ListNode*>& lists) {
//通过两两合并,然后最后只剩一个
if(lists.size()==0)
return nullptr;
else if(lists.size()==1)
return lists[0];
int total=lists.size();
while(total>1){
for(int i=0; i < total/2; i++){
auto mer=merge2(lists[2*i], lists[2*i+1]);
lists[i]=mer;
}
if(total%2==1){
lists[total/2]=lists[total-1];
total=total/2+1;
}
else{
total=total/2;
}
}
return lists[0];
}
private:
ListNode *merge2(ListNode *l1, ListNode *l2) {
if(l1 == nullptr){
return l2;
}
if(l2 == nullptr){
return l1;
}
if(l2 == nullptr){
return l1;
}
if(l1->val <= l2->val){
l1->next = merge2(l1->next, l2);
return l1;
}
else{
l2->next = merge2(l1, l2->next);
return l2;
}
}
};