Почему этот связанный список C портит? - PullRequest
2 голосов
/ 06 апреля 2011

Я не посещал занятия CS в течение 2 лет. Я не могу понять, почему этот простой связанный список портит:

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 ]

5 голосов
/ 06 апреля 2011

Вы уверены, что второй оператор if равен

if(list->value == val)

а не

if(list->value = val)

Это единственное, что я вижу, это может изменить значение.

1 голос
/ 06 апреля 2011

Что не работает точно?Код выглядит отлично.

Попробуйте запустить программу на valgrind, чтобы проверить ошибки памяти, которые могут отсутствовать.

0 голосов
/ 06 апреля 2011

Кстати, как долго твой связанный список?

Возможно, это не ваша проблема, но помните, что ваш рекурсивный подход означает, что вы можете получить переполнение стека в очень длинных списках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...