您的位置:首页 > 其它

LeetCode OJ - Merge k Sorted Lists

2014-07-23 17:12 316 查看
Merge k sorted
linked lists and return it as one sorted list. Analyze and describe its complexity.

分析:对于多个已排序的序列容易想到归并排序。归并排序的最大优点在于,归并一次操作简单,归并次数少。 递归时间复杂度参考主定理

/**
* 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) {
int len = lists.size();
if(len == 0) return NULL;

ListNode *head = mergeSort(lists, 0, len - 1);

return head;
}

ListNode *mergeSort(vector<ListNode *> &lists, int left, int right) {
if(left < right) {
int mid = (left + right) / 2;
ListNode *front = mergeSort(lists, left, mid);
ListNode *back = mergeSort(lists, mid + 1, right);
return merge(front, back);
}
return lists[left];
}

ListNode *merge(ListNode *list1, ListNode *list2) {
if(!list1 && !list2) return NULL;

ListNode dummy(0);
ListNode *tail = &dummy;

while(list1 && list2) {
if(list1->val < list2->val) {
tail->next = list1;
list1 = list1->next;
} else {
tail->next = list2;
list2 = list2->next;
}
tail = tail->next;
}

if(list1) {
tail->next = list1;
}

if(list2) {
tail->next = list2;
}

return dummy.next;
}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: