题目
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例
输入:
[
1->4->5,
1->3->4,
2->6
]
输出:
1->1->2->3->4->4->5->6
C++代码
笨方法:先将所有链表数据放入一个数组,对数组进行排序,然后把数组转换为一个链表。
注意特殊情况[ [], [] ]…
class Solution {
public:
ListNode* mergeKLists(vector<ListNode*>& lists)
{
ListNode *root=new ListNode(NULL);
if(lists.size()==0 ) return NULL;
ListNode *tmp;
vector<int> res;
int flag=0;
for(int i=0;i<lists.size();i++)
{
tmp=lists.at(i);
if(tmp==NULL)
flag++;
while(tmp!=NULL)
{
res.push_back(tmp->val);
tmp=tmp->next;
}
}
if(flag==lists.size()) return NULL;
sort(res.begin(),res.end());
ListNode *tmp0=new ListNode(res.at(0));
root->next=tmp0;
for(int i=1;i<res.size();i++)
{
ListNode *tmp1=new ListNode(res.at(i));
tmp0->next=tmp1;
tmp0=tmp1;
tmp0->next=NULL;
}
return root->next;
}
};