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

递归实现的链表单词存在检测函数是否正确?

你的递归链表查找函数存在这些问题
  • 冗余的while循环:你的代码同时混用了递归和while循环,但二者逻辑冲突。第一次进入函数时,只要head不为空,要么直接返回true,要么递归调用下一个节点,递归调用后不会回到当前的while循环,所以这个while完全是多余的,还会混淆代码逻辑。

  • 缺少链表遍历结束的返回值:当遍历到链表末尾(head == NULL)时,函数没有返回任何值,这会触发未定义行为——C语言要求非void类型的函数必须明确返回对应类型的值。此时应该返回false,表示目标单词不存在于链表中。

  • 参数可以更严谨:把char word[25]改为const char *word更合理:一是明确我们不会修改传入的字符串,二是能兼容长度超过25的合法C字符串(只要是以'\0'结尾的)。

修正后的代码

#include <stdbool.h>
#include <string.h>

// 假设你的index结构体定义如下(如果已有可忽略)
typedef struct index {
    char word[25];
    struct index *next;
} index;

bool does_exist_in_list(index *head, const char *word) {
    // 递归终止条件:链表为空,未找到目标单词
    if (head == NULL) {
        return false;
    }

    // 当前节点匹配,返回true
    if (strcmp(word, head->word) == 0) {
        return true;
    }

    // 递归查找下一个节点
    return does_exist_in_list(head->next, word);
}

额外提醒:确保head->word是合法的、以'\0'结尾的C字符串,否则strcmp会读取超出内存范围的数据,导致未定义行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:35:16