LeetCode OJ 之 Merge k Sorted Lists(合并k个有序链表)

来源:互联网 发布:身份证信息读取软件 编辑:程序博客网 时间:2024/05/22 01:32

题目:

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

合并k个有序链表,返回合并后的链表。分析复杂度。

思路:

先两两合并。链表数减少到k/2,然后再两两合并链表数目又减少到k/4,依次这样下去,直到只剩一个链表。

代码:

/** * 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)     {        if(lists.empty())            return NULL;        int len = lists.size();        while(len > 1)        {            for(int i = 0 ; i < len / 2 ; i++)            {                lists[i] = mergeTwoLists(lists[i] , lists[len - 1 - i]);//前后合并            }            len = (len + 1) / 2;//长度缩小        }        return lists.front();    }    ListNode * mergeTwoLists(ListNode *l1 , ListNode *l2)    {        if(l1 == NULL)            return l2;        if(l2 == NULL)            return l1;        if(l1->val < l2->val)        {            l1->next = mergeTwoLists(l1->next , l2);            return l1;        }        else        {            l2->next = mergeTwoLists(l1 , l2->next);            return l2;        }    }};


0 0
原创粉丝点击