m0_74000326 2024-09-11 18:20 采纳率: 14.3%
浏览 6

链表输出的时候,一直无限循环


void LinkList::Display()
{
    //正序输出链表
    node* p = new node;//创建临时结点保存即将输出的结点
    p = head->next;
    while (p) {
        cout << p->data << " ";
        p = p->next;//更新指针以输出下一个
    }

}

bool LinkList::Reverse()
{
    //node* toDelete = head;//不能有头节点,否则翻转后不对。用一个新的head保存链表
    head = head->next;
    //delete toDelete;//删除头节点

    node* pre = NULL;//待翻转结点的前一个结点,要从NULL开始
    node* p = head;//保存即将翻转的结点,就是首元结点
    while (p) {
        node* temp = p->next;//保存好下一个结点,因为马上p要断开和后面的连接
        p->next = pre;
        pre = p;
        p = temp;//不能交换,不然p的值丢失
    }

    //head = pre;//这步忘了,输出不了
    head->next = pre;//这步是为了能输出,head
    return true;
}

输出的时候,一直无限循环,崩溃了,reverse函数怎么样改一下

  • 写回答

2条回答 默认 最新

  • 一轮明月照丘壑 2024-09-11 18:21
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    为了修复这个问题并实现链表反转功能,你需要在Reverse()方法中进行一些调整:

    1. Reverse()方法中,将head赋值为new node(head)而不是toDelete
    2. 由于你在递归过程中没有释放pre变量的内存,因此需要将其初始化为NULL

    以下是修改后的Reverse()方法:

    void Reverse(LinkList& list)
    {
        node* toDelete = head; // 将旧的head设置为新的head
        head = head->next;     // 更新head指向新头部
        delete toDelete;       // 删除旧的head
    
        node* pre = NULL;      // 假设当前节点是第一个节点(注意:这是假设)
        node* p = head;        // 当前节点
    
        while (p) {
            node* temp = p->next; // 保存好下一个结点,因为马上p要断开和后面的连接
            p->next = pre;         // 把当前节点的next指向前一个节点,即pre
            pre = p;                // 将p的地址赋给pre,然后更新p指向下一个节点
            p = temp;               // 不能交换,不然p的值丢失
        }
        
        head->next = pre;          // 将最后一个节点的next指向最后一个节点(这里应该是最后一个节点的next,因为这个操作发生在循环结束时)
    
        // 注意:这一步是为了能输出,head
        head->next = pre;          // 这一步是为了能输出,head
    }
    

    现在,你应该可以正常地对链表进行反转操作了。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月11日

悬赏问题

  • ¥30 stm32f103c8t6制作万能红外遥控器
  • ¥15 有人会fastcrud写前端页面吗
  • ¥15 如何解除Uniaccess管控
  • ¥15 微信小程序跳转关联公众号
  • ¥15 Java AES 算法 加密采用24位向量报错如何处理?
  • ¥15 使用X11可以找到托盘句柄,监控到窗口点击事件但是如何在监听的同时获取托盘中应用的上下文菜单句柄
  • ¥45 字符串操作——数组越界问题
  • ¥15 Loss下降到0.08时不在下降调整学习率也没用
  • ¥15 QT+FFmpeg使用GPU加速解码
  • ¥15 为什么投影机用酷喵播放电影放一段时间就播放不下去了?提示发生未知故障,有什么解决办法吗?