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

C语言链表moveOddItemsToBack功能节点顺序异常问题咨询

问题原因分析
  • 核心逻辑错误:删除当前索引的奇数节点后,该位置后续的所有节点会整体前移一位,你的代码无论是否删除节点都统一执行index++,会导致index和cur指针指向的节点实际索引错位,出现遍历遗漏、删错节点的问题,最终结果顺序错乱。
  • 语法隐患:函数内未声明index变量,若不存在全局定义的index会直接编译失败。
修复后的代码
void moveOddItemsToBack(LinkedList *ll)
{
    ListNode *cur = ll-> head;
    int orgsize = ll->size; 
    int index = 0;   // 补全index的局部声明

    // 空链表直接返回
    if (cur == NULL) return;

    while (orgsize > 0){
        // 当前节点为奇数
        if (cur->item %2 !=0){
            insertNode(ll, ll->size, cur->item);  // 奇数追加到末尾
            cur = cur -> next;
            removeNode(ll, index); // 删除原位置奇数
            // 删除节点后index不递增,因为下一个待检查节点已经移到当前index位置
        }
        // 当前节点为偶数
        else{
            cur = cur -> next;
            index++;  // 只有未删除节点时才递增index
        }
        orgsize--;
    }
}
验证说明

以输入链表1->2->3->4->5为例,修复后输出为2->4->1->3->5,偶数、奇数的相对顺序都和原始链表一致,符合功能要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:54:03