描述你的问题
出现疑问的是这道题: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];
}
我在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++;
}
这可能会导致内存非法访问。