leetcode---merge-k-sorted-lists---链表

来源:互联网 发布:基洛夫飞艇 知乎 编辑:程序博客网 时间:2024/06/05 20:21

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 *merge(ListNode *h1, ListNode *h2)    {        if(!h1)            return h2;        if(!h2)            return h1;        ListNode *head = new ListNode(0);        ListNode *p = head;        ListNode *p1 = h1, *p2 = h2;        while(p1 && p2)        {            if(p1->val < p2->val)            {                p->next = p1;                p1 = p1->next;            }            else            {                p->next = p2;                p2 = p2->next;            }            p = p->next;        }        if(p1)            p->next = p1;        else if(p2)            p->next = p2;        return head->next;    }    ListNode *dfs(vector<ListNode *> &lists, int start, int end)    {        if(start > end)            return NULL;        if(start == end)            return lists[start];        int mid = (start + end) / 2;        ListNode *left = dfs(lists, start, mid);        ListNode *right = dfs(lists, mid+1, end);        return merge(left, right);    }    ListNode *mergeKLists(vector<ListNode *> &lists)     {        int n = lists.size();        if(n == 0)            return NULL;        return dfs(lists, 0, n-1);    }};