Я создал 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); }
Хороший простой. Вы забыли поставить «возврат» в окончательном утверждении:
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)));
}
Лично я бы предпочел прочитать ваши шесть строк. Однако другие могут не согласиться, особенно потому, что это позволило бы избежать проблемы с отсутствующим оператором возврата.
Других решений пока нет …