Bool метод возвращает неправильное значение

Я создал bool contains(string) метод для хеш-таблицы связанного списка, который проверяет, есть ли значение в хеш-таблице. Я использую вспомогательную функцию для рекурсии, но когда вспомогательная функция возвращает false, bool contains(string) все еще возвращает истину. Я запустил его через отладчик, и я ясно вижу, что он возвращает false, и я не уверен, почему.

Вот текущий узел, который ищется:

"laccoliths"->"morbiferous"->"oculi"->"unscabbarded"

значение, которое я ищу, это "typung",

Вот код:

bool contains_h(string x, node * p) //helper method
{
if (p == NULL)
return false;
else if (x == p->data)
return true;
else
contains_h(x, p->next);
}

bool contains(string word) { return contains_h(word, head); }

4

Решение

Хороший простой. Вы забыли поставить «возврат» в окончательном утверждении:

bool contains_h(string x, node * p) //helper method
{
if (p == NULL)
return false;
else if (x == p->data)
return true;
else
return contains_h(x, p->next);
}

И из любопытства я переписал ваш код в одну строку, чтобы посмотреть, как он будет выглядеть:

bool contains_h(string x, node * p) //helper method
{
return ((p!=NULL) && (x == p->data || contains_h(x, p->next)));
}

Лично я бы предпочел прочитать ваши шесть строк. Однако другие могут не согласиться, особенно потому, что это позволило бы избежать проблемы с отсутствующим оператором возврата.

7

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector