earthhouge 2020-08-15
题目地址:https://leetcode-cn.com/problems/merge-k-sorted-lists/
解题思路:简单的分治算法
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
private:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode *Head=new ListNode(0);
ListNode *p,*q,*h;
p=l1;
q=l2;
h=Head;
while(p&&q){
if(p->val>=q->val){
h->next=q;
h=h->next;
q=q->next;
}
else{
h->next=p;
h=h->next;
p=p->next;
}
}
if(p)
h->next=p;
else
h->next=q;
return Head->next;
}
ListNode *merge(vector<ListNode*>& lists,int l,int r){
if (l == r)
return lists[l];
if (l > r)
return nullptr;
int mid = (l + r) >> 1;
return mergeTwoLists(merge(lists, l, mid), merge(lists, mid + 1, r));
}
public:
ListNode* mergeKLists(vector<ListNode*>& lists) {
return merge(lists,0,lists.size()-1);
}
};