c++刷题-23(在创建对象时一定要记得初始化)

本文通过一个血泪教训讲述了在创建对象时初始化的重要性。作者在实现合并K个排序链表的函数时,由于未初始化`ListNode* cur`,导致程序出现意想不到的错误。修复方法是将`ListNode* cur=nullptr;`初始化为空指针,从而确保代码按预期运行。文章强调了初始化变量对于代码正确性和调试效率的关键作用。

在创建对象时一定要记得初始化不指定,你永远不知道那块内存里面装了啥!血的教训,找bug找了两天。

当没有初始化时,代码如下:

class Solution {
public:
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        ListNode* dummy = new ListNode;
        ListNode* tail = dummy;
        int num = lists.size();
        while (true)
        {
             ListNode* cur;
            int n = -1;
            for(int i =0; i< num; i++){
                if(lists[i] == nullptr ){
                    continue;
            }
            if(cur == nullptr || lists[i]->val < cur->val){
                cur = lists[i];
                n = i;
              
                }
            }
            if(n == -1){
                break;
            }
        tail->next = cur;
        tail = tail ->next;
        lists[n] = lists[n]->next;  
        }
        return dummy->next;
    }
};

会出现意想不到的错误如:

已完成

执行用时:4 ms

输入

[[1,4,5],[1,3,4],[2,6]]

输出

[1,4,5]

差别

预期结果

[1,1,2,3,4,4,5,6]

创建对象应该进行初始化,如下:

ListNode* cur = nullptr;

使其指向为空,才会按照你的想法呈现结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值