Меня попросили в интервью выяснить, есть ли у одного связанного списка петля. Я искал это SO и нашел несколько ответов Вопрос с интервью: как определить цикл в связанном списке?, и я знал об этих ответах раньше, но почему-то я ответил на это по-разному, что я имел в виду из моей беседы с друзьями долгое время назад, но я не был уверен, правильно ли ответ. Если попробовать, то он работает так, как ожидалось. Почему-то интервьюер не доволен. Может кто-то уточнить, что в этом плохого?Как определить, является ли данный одиночный связанный список циклом?
struct node {
int flag;
struct node *next;
}
Моя идея здесь не использовать два указателя и хмель variantly но использовать единый указатель и пройти каждый узел, например:
node = node->next;
Только это я бы сделать, это установить переменную флаг в 1, когда я когда-либо пройти узел и проверить каждый раз, например,
if (node->flag)
{
return TRUE; // implies list is a loop
}
else{
node->flag = 1;
}
Другие, чем эффективность, что неправильно в таком подходе?
См. Http://stackoverflow.com/questions/34249/best-algorithm-to-test-if-a-linked-list-has-a-cycle и связанные с ним вопросы для других подходов. – delnan
@ delnan: Да, я тоже прошел этот вопрос. В основном я затронул все связанные с этим вопросы. Однако мой вопрос заключается в том, чтобы понять, что не так в этом подходе. – dicaprio
Эти вопросы появляются только в том случае, если вы читали эти вопросы раньше и знакомы с ответом. Я бы никогда не использовал его как показатель того, насколько квалифицирован разработчик. – onemasse