题目:
给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
方法一:归并+分治
函数代码:
class Solution {
public:
ListNode* mergeKLists(vector<ListNode*>& lists) {
if(lists.size()==0)
{
return NULL;
}
return mergesort(lists,0,lists.size()-1);
}
ListNode *mergesort(vector<ListNode *>&lists,int left,int right)
{
if(left==right)
{
return lists[left];
}
int mid=left+(right-left)/2;
ListNode *l1=mergesort(lists,left,mid);
ListNode *l2= mergesort(lists,mid+1,right);
return merge(l1,l2);
//上面三行等效下面这句
//return merge(mergesort(lists,left,mid),mergesort(lists,mid+1,right));
}
ListNode *merge(ListNode *l1,ListNode *l2)
{
if(!l1)
{
return l2;
}
if(!l2)
{
return l1;
}
if(l1->val<l2->val)
{
l1->next=merge(l1->next,l2);
return l1;
}
else
{
l2->next=merge(l1,l2->next);
return l2;
}
}
};