Merge k Sorted Lists

来源:互联网 发布:淘宝网羊毛衫烟火726 编辑:程序博客网 时间:2024/06/05 20:34

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(vector<ListNode*> &lists, int left, int right)    {    if (left > right)    {    return NULL;    }    if (left == right)    {    return lists[left];    }    int mid = left + (right-left)/2;    ListNode *first = merge(lists, left, mid);    ListNode *second = merge(lists, mid+1, right);        if (first == NULL)        {            return second;        }        if (second == NULL)        {            return first;        }    ListNode *head = NULL;    ListNode *prev = NULL;    if (first->val < second->val)    {    head = first;    first = first->next;    }    else    {    head = second;    second = second->next;    }    prev = head;    while (first && second)    {    if (first->val < second->val)    {    prev->next = first;    prev = first;    first = first->next;    }    else    {    prev->next = second;    prev = second;    second = second->next;    }    }    if (first)    {    prev->next = first;    }    else    {    prev->next = second;    }    return head;    }        ListNode* mergeKLists(vector<ListNode*>& lists) {        int size = lists.size();    if (size < 1)    {    return NULL;    }    return merge(lists, 0, size-1);    }};


0 0
原创粉丝点击