DEBUG
-
assignment to expression with array type
出错语句:
struct ListNode (*ptrs)[listsSize]; for (int i=0; i<listsSize; i++) ptrs[i] = lists[i];
区分数组指针与指针数组:
待填坑!!!
代码
1.顺序找最小值
struct ListNode *min_node(struct ListNode **ptr_ptrs, int listsSize)
{
struct ListNode *res = NULL;
int min_idx = -1;
for (int i=0;i<listsSize;i++){
if (ptr_ptrs[i] != NULL){
if (res == NULL) {
res = ptr_ptrs[i];
min_idx = i;
}
else {
res = res->val > ptr_ptrs[i]->val ? ptr_ptrs[i] : res;
if (res == ptr_ptrs[i]) min_idx = i;
}
}
}
// if (res != NULL) for(int i=0;i<listsSize;i++){
// if (ptr_ptrs[i] == res)
// ptr_ptrs[i]=res->next;
// }
//printf ("min_idx=%d\n", min_idx);
if (min_idx > -1) ptr_ptrs[min_idx] = res->next;
//printf("res:%p\n", res);
return res;
}
struct ListNode* mergeKLists(struct ListNode** lists, int listsSize){
if (listsSize == 0) return NULL;
if (listsSize == 1 && lists[0] == NULL) return NULL;
struct ListNode *ptrs[listsSize];
for (int i=0; i<listsSize; i++) ptrs[i] = lists[i];
struct ListNode *dummy = malloc (sizeof(struct ListNode));
struct ListNode *p = dummy;
struct ListNode *temp;
while ((temp = min_node(ptrs, listsSize)) != NULL){
//printf("temp=%p\n", temp);
p->next = temp;
p=p->next;
//printf("p.val=%d\n", p->val);
}
p->next = NULL;
return dummy->next;
}
2.优先队列
待填坑!!!