/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) : val(x), next(nullptr) {}
* };
*/
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {
if(pHead1==nullptr)
return pHead2;
if(pHead2==nullptr)
return pHead1;
ListNode* dummy=new ListNode(-1);
ListNode* cur=dummy;
ListNode* cur1=pHead1;
ListNode* cur2=pHead2;
while(cur1!=nullptr&&cur2!=nullptr)
{
if(cur1->val>=cur2->val)
{
cur->next=cur2;
cur2=cur2->next;
}
else
{
cur->next=cur1;
cur1=cur1->next;
}
cur=cur->next;
}
if(cur1==nullptr)
{
cur->next=cur2;
}
if(cur2==nullptr)
{
cur->next=cur1;
}
return dummy->next;
}
ListNode* divideMerge(vector<ListNode*>& lists,int l,int r)
{
if(l>r)
return nullptr;
else if(l==r)
return lists[l];
int m=(l+r)/2;
return Merge(divideMerge(lists,l,m),divideMerge(lists,m+1,r));
}
ListNode* mergeKLists(vector<ListNode*>& lists) {
return divideMerge(lists,0,lists.size()-1);
}
};
归并排序

京公网安备 11010502036488号