您的位置:首页 > 其它

[LeetCode OJ]Merge k Sorted Lists

2017-03-09 21:46 134 查看

【问题描述】

Merge k sorted
linked lists and return it as one sorted list. Analyze and describe its complexity.

问题来源:Merge
k Sorted Lists

【解题分析】

将k个有序的数组合并成一个有序的数组,将其分而治之,每次只比较两个数组,简易图为:



如此,我们只需重复将两个数组合并为一个数组。
假设有两个数组A1和A2,比较两个数组的元素A1[i]和A2[j],将较小的元素放入新数组,如果A1[i]小,则i++;如果A2[j]小,则j++,再接着比较A1[i]和A2[j],直到一个数组全部进行了比较。

【源代码】

/**
* 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* result = NULL;
int i = 0;
while (i < lists.size()) {
MergeTwoLists(result,lists[i]);
i++;
}
return result;
}
private:
void MergeTwoLists(ListNode* &l1, ListNode* l2) {
ListNode* newlist = new ListNode(0);
ListNode* phead = newlist;
while (l1 != NULL && l2 != NULL) {
if (l1->val < l2->val) {
newlist->next = l1;
newlist = newlist->next;
l1 = l1->next;
} else {
newlist->next = l2;
newlist = newlist->next;
l2 = l2->next;
}
}
if (l1 != NULL) {
newlist->next = l1;
}
if (l2 != NULL) {
newlist->next = l2;
}
l1 = phead->next;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: