微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

控制到达非空函数的末尾在尾部添加一个节点

如何解决控制到达非空函数的末尾在尾部添加一个节点

*SinglyLinkedListNode* insertNodeAtTail(SinglyLinkedListNode* head,int data) {
     SinglyLinkedListNode *t=new SinglyLinkedListNode(data);
     SinglyLinkedListNode *last{head};

     if(head==nullptr)
     {
         head=t;
         return head;
     }
     else if(last->next==nullptr)
     {
        last->next=t;
        last=t;
        return head;
         
     }
     else
     {
         while(last)
         {
             if(last->next==nullptr)
             {
                 last->next=t;
                last=t;
                return head;
                
             }
             last=last->next;
         }
      }
     }

函数在链表的末尾添加一个节点。 如果我在 if-else 块之外编写 return 语句,则工作正常,但如上所示,它会出现错误。 为什么?

解决方法

该消息表明至少有一个代码路径缺少 return - 检查您的最后一个 else。如果 while 存在是因为 last==nullptr,则没有 return

,

就静态分析器而言,while(last) 理论上可以退出。而且如果你不小心从不同线程重新进入这个函数也可能是正确的。

可以重新排列代码以简化流程。你的函数的目的是你必须遍历 next 的值,如果 next 是 nullptr,你必须替换它。 你确定你总是要返回 head 吗?这看起来像是一个错误\错误。

{
    SinglyLinkedListNode *t =new SinglyLinkedListNode(data);
    if(!head) 
        return head = t;

    SinglyLinkedListNode *last{head};
    while (last->next)
        last = last->next;

    // we go here if last->next is nullptr,// earliest case would be head->next == nullptr
    return (last->next = t);
}

无论如何,这个函数会在任何路径返回一些东西。

PS:我真的希望构造函数看起来像 SinglyLinkedListNode(Data &d) : data(d),next(nullptr) {} 否则你手上会有 UB 和可能的无限循环

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。