一、题目:
合并 k 个已排序的链表并将其作为一个已排序的链表返回。分析并描述其复杂度。
二、输入输出示例:
三、代码:
/**
* 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) {
if(lists.empty()){
return NULL;
}
ListNode *res = lists[0];
for(int i=1;i<lists.size();i++){
res = MergeList(res,lists[i]);
}
return res;
}
ListNode *MergeList(ListNode *p1,ListNode *p2){
if(p1 == NULL){
return p2;
}
if(p2 == NULL){
return p1;
}
ListNode *p = new ListNode(0);
p = p1->val <= p2->val ? p1 : p2;
p->next = p1->val <= p2->val ? MergeList(p1->next,p2) : MergeList(p1,p2->next);
return p;
}
};