题目描述:
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-k-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解:
class Solution {
public:
ListNode* mergeKLists(vector<ListNode*>& lists)
{
ListNode* fakehead = new ListNode(-1);
ListNode* p = fakehead;
ListNode* s = p->next;
for(auto l:lists)
{
while(s && l)
{
if(s->val <= l->val)
{
p->next = s;
p=s;
s=s->next;
}
else
{
p->next = l;
p = l;
l = l->next;
}
}
if(l)
p->next = l;
if(s)
p->next = s;
p = fakehead;
s = p->next;
}
ListNode *res = fakehead->next;
delete fakehead;
return res;
}
};
解题思路:
fakehead 对链表生成一个假头部,循环比较,每次将新生成的链表同数组中的下一个链表比较排序,最后生成完全排序的链表