cherish340 2023-05-25 17:29 采纳率: 87.5%
浏览 14

关于链表指针指向,赋值问题

img


如图两段代码,为什么第一段代码构建的链表有问题,而第二段可以

  • 写回答

2条回答 默认 最新

  • 开发技术控 2023-05-25 17:46
    关注

    该回答引用ChatGPT

    这两段代码都想实现在链表尾部添加一个新节点。但是第一段代码有问题,会导致无限循环。原因是:
    第一段代码:
    cpp

    
    void 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循环永不退出,产生无限循环。
    第二段代码修正了这个问题:
    cpp

    
    void 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追加到该节点后。
    所以第二段代码修正了第一个代码片段的问题,避免了无限循环的产生,实现了链表尾部添加节点的功能。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月25日

悬赏问题

  • ¥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项目错误