leetcode23 合并K个排序链表–有序链表的合并问题
题目描述:
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
题目分析:
首先写一个将两个有序链表合并为一个链表的函数,使用此函数将lists中的所有链表依次合并到第一个链表当中。
/**
* 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) {
//思想:先写出合并两个链表的函数,然后不断合并已经合并的新链表和下一个list
if(lists.size()==0){return NULL;}
ListNode *res=lists[0];
for(int i=1;i<lists.size();i++)
{
res=merge2List(res,lists[i]);
}
return res;
}
ListNode *merge2List(ListNode *l1,ListNode *l2){
if(l1==NULL&&l2!=NULL)return l2;
if(l2==NULL&&l1!=NULL)return l1;
else{
ListNode *ahead=new ListNode(0);
ListNode *p=ahead;
while(l1&&l2)
{
if(l1->val<l2->val)
{
p->next=l1;
l1=l1->next;
}
else{
p->next=l2;
l2=l2->next;
}
p=p->next;
}
if(l1==NULL){p->next=l2;}
if(l2==NULL){p->next=l1;}
return ahead->next;
}
}
};v