23.合并 k 个排序链表
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1 -> 4 -> 5,
1 -> 3 -> 4,
2 -> 6
]
输出:1 -> 1 -> 2 -> 3 -> 4 -> 4 -> 5 -> 6
来源:力扣(LeetCode)
链接:link
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
分析:使用暴力方式,将链表中的所有元素存放在一个 vector 向量中,对向量中的元素进行排序,将排序后的元素存入新的链表中。
C++源码:
/**
* 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)
{
vector<int> result;
int Size = lists.size();
for(int i = 0;i < Size;i++)
{
ListNode* temp = lists[i];
while(temp)
{
result.push_back(temp->val);
temp = temp->next;
}
}
sort(result.begin(),result.end());
ListNode* Result = new ListNode(0);
ListNode* L = Result;
for(vector<int>::iterator it = result.begin();it != result.end();it++)
{
ListNode* temp = new ListNode(0);
temp->val = *it;
L->next = temp;
L = temp;
}
return Result->next;
}
};