描述你的问题
出现疑问的是这道题: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];
}
那个last executed input是最后一次正常执行的用例,而下一个用例因为发生了Runtime Error所以并没有执行。
你的代码会在长度为奇数时出错,比如[[],[-1,5,11],[],[6,10],[3]],在你给的用例后面加了一个元素。
原因是你的这句代码:
if(i+1 >= listsSize){
lists[i+1] = NULL; // error!!
listsSize++;
}
这可能会导致内存非法访问。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。