[LeetCode OJ]Merge k Sorted Lists

来源:互联网 发布:pr软件图标 编辑:程序博客网 时间:2024/06/03 20:01

【问题描述】

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;}};
0 0