
想法十分简单粗暴但有效,将首个链表头作为起点,然后依次遍历各个链表,每个链表再将节点依次插入首个链表中。
cpp
/**
* 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;
ListNode* result=new ListNode(0,lists[0]);
for(int i=1;i<lists.size();i++){
ListNode* l=lists[i];
ListNode* r=result->next;
ListNode* pre=result;
while(l){
ListNode* ln=l->next;
bool b=0;
while(r){
if(r->val>=l->val){
b=1;
pre->next=l;
l->next=r;
pre=l;
}
if(b==1) break;
pre=r;
r=r->next;
}
if(b==0){
pre->next=l;
break;
}
l=ln;
}
}
return result->next;
}
};