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日