leetcode第一刷_Merge k Sorted Lists

来源:互联网 发布:软件商业计划书模板 编辑:程序博客网 时间:2024/05/17 22:25

看到这道题,我吐了。做过两个merge的,就已经够恶心了,居然k个都要merge。。

写的时候我没考虑太多,从头到尾的merge,merge的结果指针放到后一个的位置上,这样输出最后一个指针就可以了。更好的方式应该是用类似归并的方法。一层一层的往上合并,回头把这个的代码写一下,发上来。

ListNode* merge(ListNode* a, ListNode *b){    if(a == NULL)        return b;    if(b == NULL){        return a;    }    if(a->val>b->val){        ListNode* tp = a;        a = b;        b = tp;    }    ListNode* head = a, *pre = a;    a = a->next;    head->next = NULL;    while(a && b){        if(a->val<=b->val){            pre->next = a;            pre = a;            a = a->next;            pre->next = NULL;        }else{            pre->next = b;            pre = b;            b = b->next;            pre->next = NULL;        }    }    if(a){        pre->next = a;    }    if(b){        pre->next = b;    }    return head;}  class Solution {public:    ListNode *mergeKLists(vector<ListNode *> &lists) {        if(lists.size() == 0)            return NULL;        if(lists.size() == 1)            return lists[0];        int len = lists.size();        for(int i=1;i<len;i++){            lists[i] = merge(lists[i-1], lists[i]);        }        return lists[len-1];    }};


0 0