Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
题意:合并k个有序链表为1个有序链表。
思路:直接比较实现。比大小的过程从后向前执行。复杂度O(n*k) beats: 2.47%
/**
* 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) {
ListNode* head = new ListNode(-1);
ListNode* p = head;
while (!lists.empty()){
int min = (numeric_limits<int>::max)();
int index = -1;
for (int i = lists.size() - 1; i >= 0; i--){
if (lists[i] == NULL){
lists.erase(lists.begin() + i);
if (index != -1)
index--;
}
else{
if (lists[i]->val < min){
min = lists[i]->val;
index = i;
}
}
}
if (index != -1){
p->next = lists[index];
p = p->next;
lists[index] = lists[index]->next;
}
}
return head->next;
}
};