题意:
将k个已经有序的链表排序成1个。
思路:
可以不断将待排序的链表分成两份,然后归并排序,复杂度为O(nlogn)。
我的做法更简单些,直接先放在一个容器里,然后sort。时间复杂度O(n+nlogn),空间复杂度O(n)。
代码:
/**
* 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 < ListNode * > qu;
for (int i = 0; i < lists.size(); ++i) {
while (lists[i] != NULL) {
qu.push_back(lists[i]);
lists[i] = lists[i]->next;
}
}
if (qu.empty()) {
return NULL;
}
sort(qu.begin(), qu.end(), cmp);
for (int i = 0; i < qu.size() - 1; ++i) {
qu[i]->next = qu[i + 1];
}
qu[qu.size() - 1]->next = NULL;
return qu[0];
}
private:
static bool cmp(ListNode *f1, ListNode *f2) {
return f1->val < f2->val;
}
};