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

链表最后节点验证失败:蛋糕添加时重复Code校验异常

问题分析与修复

你的validateCode函数存在三个核心问题,导致无法正确验证重复code,尤其是最后一个节点的情况:

  • flag未初始化:局部变量flag没有初始值,当链表为空时,循环不会执行,直接返回flag的随机值,引发未定义行为。
  • 遍历未提前终止:找到重复的code后,没有立即停止遍历,后续节点会覆盖flag的值。比如链表前半部分有重复code,后半部分没有,最终flag会被改成1,错误地认为code不存在。
  • 提示逻辑完全反转:你在flag == 1时输出“code已存在”,但实际上flag == 1表示当前节点的code与输入不匹配,这完全搞反了判断逻辑。

修正后的代码

#include <string.h>
#include <stdio.h>

struct cookie
{
    char code[10], name[100];
    int stock, price;
    struct cookie *next;
};

int validateCode(struct cookie *test, char kode[10]){
    // 遍历链表所有节点
    while(test != NULL){
        // 比较当前节点的code和输入的kode
        if(strcmp(test->code, kode) == 0){
            // 找到重复,输出提示并返回0(验证不通过)
            printf("%s already exists in the linked list\n", kode);
            return 0;
        }
        test = test->next;
    }
    // 遍历完所有节点都没找到重复,返回1(验证通过)
    return 1;
}

关键修改说明

  1. 移除冗余的flag变量:直接在找到重复时立即返回,避免后续节点覆盖判断结果,同时简化逻辑。
  2. 提前终止遍历:一旦找到匹配的code,立刻输出提示并返回0,无需继续遍历剩余节点,提升效率。
  3. 修正逻辑对应关系:返回0表示code已存在(验证失败),返回1表示code不存在(验证成功),提示消息仅在找到重复时触发。
  4. 无需修改循环条件:原test != NULL的循环条件是正确的,能遍历包括最后一个节点在内的所有节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 12:59:14