合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
思路:
1: 有k个排序的链表,我们可以先将两个链表进行合并。
2. 合并出来的链表在和一个链表合并,以此类推。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeKLists(vector<ListNode*>& lists) {
int size = lists.size();
if (size==0) return nullptr;
if (size==1) return lists[0];
ListNode* p= lists[0];
for (int i=1; i<size; i++)
{
p=mergelist(p,lists[i]);
}
return p;
}
ListNode* mergelist(ListNode* list1, ListNode* list2)
{
ListNode* head= new ListNode(0);
ListNode* p=head;
while(list1&&list2)
{
if(list1->val<list2->val)
{
p->next= list1;
list1=list1->next;
}
else
{
p->next= list2;
list2=list2->next;
}
p=p->next;
}
while(list1)
{
p->next=list1;
list1=list1->next;
p=p->next;
}
while(list2)
{
p->next= list2;
list2=list2->next;
p=p->next;
}
return head->next;
}
};
来源:CSDN
作者:曼巴精神程序员
链接:https://blog.csdn.net/qq_35692267/article/details/103947631