leetcode: Merge k Sorted Lists

来源:互联网 发布:查询系统端口 编辑:程序博客网 时间:2024/05/13 06:32

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

多路链表归并,复杂度O(mn logk)

/** * 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 *res = _mergeKLists( lists, 0, lists.size() - 1);        return res;    }    ListNode *_mergeKLists( vector< ListNode *> &lists, int i, int j){        if( i == j)            return lists[i];        else if( i > j)            return NULL;        else if( i + 1 == j){            ListNode *res = mergeList( lists[i], lists[j]);            return res;        }        else{            int mid = ( i + j) >> 1;            ListNode *p = _mergeKLists( lists, i, mid);            ListNode *q = _mergeKLists( lists, mid+1, j);            ListNode *res = mergeList( p, q);            return res;        }    }    ListNode *mergeList( ListNode *p, ListNode *q){        ListNode dummy(-1);        ListNode *cur = &dummy;        while( p && q){            if( p->val < q->val){                cur->next = p;                p = p->next;            }            else{                cur->next = q;                q = q->next;            }            cur = cur->next;        }        cur->next = p ? p : q;        return dummy.next;    }};


0 0
原创粉丝点击