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

C++链表实现冒泡排序时最后一个节点未参与排序问题求解

问题原因及修复方案

错误分析

代码核心问题出在BubleSort函数的内层循环终止条件:

  • 内层循环当前写的是for (j = i->next; j->next != NULL; j = j->next),当j指向最后一个节点时,j->next为NULL,循环直接终止,最后一个节点永远不会进入比较逻辑,所以不会参与排序,一直留在链表尾部。
  • 额外说明:你当前的排序逻辑本质是选择排序(固定位置i,和后续所有节点比较,把最小值放到i位置),不是标准冒泡排序(相邻节点两两比较交换,大值向后冒泡),但逻辑本身是成立的,只需要修正循环条件即可正常运行。

修复方法

把内层循环的终止条件从j->next != NULL改为j != NULL,让j可以遍历到链表的最后一个节点,参与比较交换。

修改后的排序函数代码

void BubleSort(Node *&head){
    struct Node *i ,*j;
    int num;
    for (i = head; i->next != NULL;i=i->next){
        // 终止条件改为j != NULL,遍历到最后一个节点
        for (j = i->next; j != NULL; j = j->next){
            if (i->data > j->data){
                num = j->data;
                j->data = i->data;
                i->data = num;
            }
        }
    }
}

验证结果

用你给出的输入示例测试,修改后输出为:

1-> 3-> 4-> 6-> 7-> 9->

符合升序排序要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:24:05