Leetcode 23. 合并K个排序链表
题目
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
测试样例
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
题解
归并排序的思想,将多个链表转换为两两合并
代码
ListNode* mergeKLists(vector<ListNode*>& lists) {
int n=lists.size();
if(n==0) return NULL;
return merge(lists,0,n-1);
}
ListNode*merge(vector<ListNode*>& lists,int begin,int end){
if(begin==end) return lists[begin]; //只有一个链表,不需要合并
else{
int mid=begin+end>>1;
ListNode* l1=merge(lists,begin,mid);
ListNode* l2=merge(lists,mid+1,end); //分为两个链表,转化为合并两个链表
ListNode* dummy=new ListNode(-1);
ListNode* cur=dummy;
while(l1 && l2){
if(l1->val < l2->val){
cur->next=l1;
l1=l1->next;
}else{
cur->next = l2;
l2=l2->next;
}
cur=cur->next;
}
cur->next=l1 ? l1 : l2;
return dummy->next;
}
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-k-sorted-lists/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。