开发者社区> 问答> 正文

Merge k Sorted Lists算法问题

描述你的问题
出现疑问的是这道题:https://leetcode.com/problems/merge-k-sorted-lists/
贴上相关代码
我的代码如下:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
 struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
    struct ListNode* target;
    struct ListNode* result;
    struct ListNode* side;
    struct ListNode* tmp;
    
    if(l1 == NULL) return l2;
    if(l2 == NULL) return l1;
    
    if(l1->val <= l2->val) {
        target = l1;
        result = l1;
        side = l2;
    }
    else {
        target = l2;
        result = l2;
        side = l1;
    }
    while(side && target->next){
        if(side->val > target->next->val){
            target = target->next;
        }
        else{
            tmp = target->next;
            target->next = side;
            side = side->next;
            target = target->next;
            target->next = tmp;
        }
        
    }
    if(side == NULL) return result;
    if(target->next == NULL){
        target->next = side;
        return result;
    }
}
struct ListNode* mergeKLists(struct ListNode** lists, int listsSize) {
    struct ListNode** tmplists;
    int i;
    do{
        for(i = 0; i < listsSize; i += 2){
            if(i+1 >= listsSize){
                lists[i+1] = NULL;
                listsSize++;
            }
            lists[i/2] = mergeTwoLists(lists[i], lists[i+1]);
        }
        listsSize = listsSize/2;
    }while(listsSize >= 2);
    
    return lists[0];
}

screenshot

展开
收起
a123456678 2016-06-12 11:12:12 2097 0
1 条回答
写回答
取消 提交回答
  • 那个last executed input是最后一次正常执行的用例,而下一个用例因为发生了Runtime Error所以并没有执行。

    你的代码会在长度为奇数时出错,比如[[],[-1,5,11],[],[6,10],[3]],在你给的用例后面加了一个元素。

    原因是你的这句代码:

    if(i+1 >= listsSize){
        lists[i+1] = NULL; // error!!
        listsSize++;
    }

    这可能会导致内存非法访问。

    2019-07-17 19:33:32
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
袋鼠云基于实时计算的反黄牛算法 立即下载
Alink:基于Apache Flink的算法平台 立即下载