如何解决控制到达非空函数的末尾在尾部添加一个节点
*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 举报,一经查实,本站将立刻删除。