首页 > Merge k Sorted Lists算法问题

Merge k Sorted Lists算法问题

  1. 描述你的问题
    出现疑问的是这道题:https://leetcode.com/problems/merge-k-sorted-lists/

  2. 贴上相关代码
    我的代码如下:

/**
 * 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];
}

我在submit solution时,它提示runtime error;但是把出错的case放到run code中,出来的结果和正确答案是一致的。
截图如下:


那个last executed input是最后一次正常执行的用例,而下一个用例因为发生了Runtime Error所以并没有执行。

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

原因是你的这句代码:

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

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

【热门文章】
【热门文章】