
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* mergeTwoLists(ListNode* list1, ListNode* list2) {
ListNode* dummy = new ListNode(-1);
ListNode* cur = dummy;
while(list1&&list2){
if(list1->val<list2->val){
cur->next = list1;
list1=list1->next;
}else{
cur->next = list2;
list2=list2->next;
}
cur=cur->next;
}
if(list1) cur->next=list1;
if(list2) cur->next=list2;
return dummy->next;
}
};

cpp
class Solution {
public:
ListNode* mergeKLists(vector<ListNode*>& lists) {
return traverse(lists,0,lists.size()-1);
}
ListNode* traverse(vector<ListNode*>& lists,int l, int r){
if(l>r) return nullptr;
if(l==r) return lists[l];
ListNode* left = traverse(lists, l, l+(r-l)/2);
ListNode* right = traverse(lists, l+(r-l)/2 + 1, r);
return mergeTwoLists(left,right);
}
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
ListNode* dummy = new ListNode(-1);
ListNode* cur = dummy;
while(list1&&list2){
if(list1->val<list2->val){
cur->next = list1;
list1=list1->next;
}else{
cur->next = list2;
list2=list2->next;
}
cur=cur->next;
}
if(list1) cur->next=list1;
if(list2) cur->next=list2;
return dummy->next;
}
};