为什么这个C链表损坏了?

时间:2011-04-06 13:45:05

标签: c recursion linked-list

我没有参加2年的CS课我无法弄清楚为什么这个简单的链表正在腐败:

int exists(linkedlist *list, int val) {
    if(list == NULL)
        return 0;

    if(list->value == val)
        return 1;
    return exists(list->next, val);
}

当我尝试执行exists(list,33);时,列表的第一个值被33覆盖。我被迫使用迭代方法并使程序正常工作,但这会让我感到烦恼,因为这似乎是一个有效的解决方案。为什么不起作用?

(注意:创建节点时我总是设置list->next = NULL;

3 个答案:

答案 0 :(得分:5)

您确定第二个if语句是

if(list->value == val)

而不是

if(list->value = val)

这是我唯一可以看到会改变价值的东西。

答案 1 :(得分:1)

什么不能正常工作?代码看起来非常好。

尝试在valgrind中运行程序,检查可能缺少的内存错误。

答案 2 :(得分:0)

顺便问一下,你的链表有多长?

可能不是你的问题,但要注意你的递归方法意味着你可能会在非常长的列表上出现堆栈溢出。