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

C++单链表删除能被9整除节点问题:连续符合条件节点仅删除一个

问题原因及修复方案

核心问题

  1. 连续节点漏删:原代码删除一个符合条件的节点后,立刻把currentNode移到下一个节点,导致新的currentNode->nextNodeAddress(也就是原本的下下个节点)没机会被检查。比如连续两个能被9整除的节点,删完第一个后,指针直接跳走,第二个就被漏掉了。
  2. 头节点没处理:原代码只检查当前节点的下一个节点,如果头节点本身的数据能被9整除,根本不会被删除。

修复后的代码

void deletebydivisable() {
    // 先处理头节点本身需要删除的情况
    while (head != nullptr && head->data % 9 == 0) {
        Node* toDelete = head;
        head = head->nextNodeAddress;
        delete toDelete;
    }

    if (head == nullptr) {
        return; // 链表删空了,直接返回
    }

    Node* currentNode = head;
    while (currentNode->nextNodeAddress != nullptr) {
        if (currentNode->nextNodeAddress->data % 9 == 0) {
            Node* toDelete = currentNode->nextNodeAddress;
            currentNode->nextNodeAddress = toDelete->nextNodeAddress;
            delete toDelete;
            // 删完不移动指针,继续检查新的下一个节点
        } else {
            // 只有下一个节点不用删时,才移动指针
            currentNode = currentNode->nextNodeAddress;
        }
    }
}

关键改动说明

  • 单独处理头节点:循环判断头节点是否符合删除条件,直到头节点没问题或者链表为空。
  • 调整指针移动逻辑:删除节点后不立刻移动currentNode,只有当下一个节点不需要删除时才移动,这样就能连续检查后续的节点。
  • 优化循环条件:用currentNode->nextNodeAddress != nullptr作为循环条件,避免访问空指针导致崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:01:20