You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++链表冒泡排序bubbleSort()无输出程序终止问题求助

原bubbleSort()函数存在多个致命逻辑错误,触发空指针访问导致程序直接崩溃无输出,具体问题与修复方案如下:

存在的问题

  • 空指针访问:初始定义list* p = NULL,后续未给p赋值就直接执行p->next = r,访问空指针成员触发段错误,程序直接终止。
  • 条件判断语法错误:if(q=first)是赋值操作,表达式永远为真,else分支永远不会执行,逻辑完全失效。
  • 缺少边界校验:未处理链表为空、仅含1个节点的场景,此时r = q->next为NULL,后续访问r的成员会直接崩溃。
  • 排序逻辑不完整:冒泡排序需要多轮遍历链表直到无交换发生,原代码仅做了单次相邻节点比较,无法完成整体排序。
  • 指针维护逻辑错误:遍历过程中未正确更新三个指针的指向,交换节点后没有调整指针位置,后续遍历逻辑完全混乱。

修复后的bubbleSort()代码

void bubbleSort(){
    // 边界处理:空链表或只有1个节点无需排序
    if (first == NULL || first->next == NULL) {
        cout << "\n当前列表无需排序:";
        list* iterator = first;
        while(iterator != NULL) {
            cout << iterator->data << "   ";
            iterator = iterator->next;
        }
        return;
    }

    bool swapped;
    list* sorted_end = NULL; // 标记每轮已排序的末尾边界

    do {
        swapped = false;
        list* prev = NULL; // 当前节点的前驱指针
        list* curr = first; // 当前比较的节点

        // 遍历到已排序边界就停止,避免重复比较
        while (curr->next != sorted_end) {
            list* next_node = curr->next;
            if (curr->data > next_node->data) {
                // 交换curr和next_node两个节点
                curr->next = next_node->next;
                next_node->next = curr;
                if (prev == NULL) {
                    // 交换的是头节点,更新全局头指针
                    first = next_node;
                } else {
                    prev->next = next_node;
                }
                // 交换后next_node成为当前位置节点,更新curr
                curr = next_node;
                swapped = true;
            }
            // 指针统一后移
            prev = curr;
            curr = curr->next;
        }
        sorted_end = curr; // 本轮最后一个节点已完成排序,更新边界
    } while (swapped); // 本轮无交换说明整体有序,退出循环
    
    // 输出排序结果
    cout << "\n排序后列表:   ";
    list* iterator = first;
    while(iterator != NULL) {
        cout << iterator->data << "   ";
        iterator = iterator->next;
    } 
}

额外注意

原代码中遍历链表统一使用了do-while,如果链表为空时会直接访问空指针成员,建议统一替换为while判断指针非空后再操作。

内容的提问来源于stack exchange,提问作者Alliyan Waheed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 22:54:03