23. Merge k Sorted Lists
思路:divide and conquer,分治
code:
#include <iostream>
#include <vector>
#include <string>
#include <queue>
using namespace std;
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
// Divide and Conquer
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if (!l1) return l2;
if (!l2) return l1;
if (l1->val <= l2->val) {
l1->next = mergeTwoLists(l1->next, l2);
return l1;
} else {
l2->next = mergeTwoLists(l1, l2->next);
return l2;
}
}
ListNode* mergeKLists(vector<ListNode*>& lists) {
if (lists.empty()) return NULL;
while (lists.size() > 1) {
lists[0] = mergeTwoLists(lists[0], lists.back());
lists.pop_back(); // merge the first and the last, use pop_back()
}
return lists[0];
}
};
int main () {
return 0;
}