如图两段代码,为什么第一段代码构建的链表有问题,而第二段可以
2条回答 默认 最新
- 开发技术控 2023-05-25 17:46关注
该回答引用ChatGPT
这两段代码都想实现在链表尾部添加一个新节点。但是第一段代码有问题,会导致无限循环。原因是:
第一段代码:
cppvoid LinkList::add() { record* cur = new record; record* ptr = new record ; strcpy_s(cur->name, getname()); cur->score = this->score; cur->next = nullptr; record* temp=this->head->next; while(temp->next! = nullptr) // 问题在这一行 temp = temp->next; temp->next = cur; }
在这段代码中,temp最开始指向head的下一个节点。而在while循环内,只要temp->next不为空,就继续让temp指向下一个节点。
问题在于,如果链表为空或只有一个节点,temp->next就是null,导致while循环永不退出,产生无限循环。
第二段代码修正了这个问题:
cppvoid LinkList::add() { record* cur = new record; record* ptr = new record ; strcpy_s(cur->name, getname()); cur->score = this->score; cur->next = nullptr; record* temp=this->head; while(temp->next != nullptr) temp = temp->next; temp->next = cur; }
在这段代码中,temp最开始就指向头节点head,而非head的下一个节点。那么无论链表是否为空,while循环都会正常退出。temp会指向链表的最后一个节点,并将新节点cur追加到该节点后。
所以第二段代码修正了第一个代码片段的问题,避免了无限循环的产生,实现了链表尾部添加节点的功能。解决 无用评论 打赏 举报
悬赏问题
- ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
- ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
- ¥15 clousx6整点报时指令怎么写
- ¥30 远程帮我安装软件及库文件
- ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
- ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
- ¥15 Arduino的wifi连接,如何关闭低功耗模式?
- ¥15 Android studio 无法定位adb是什么问题?
- ¥15 C#连接不上服务器,
- ¥15 angular项目错误