Как определить, содержит ли связанный список цикл? [дубликат]

6
задан Community 23 May 2017 в 11:58
поделиться

3 ответа

Легко. Сохраните в списке два указателя. На каждом шаге продвигайте один указатель на одну ссылку, а другой - на две. Проверьте, указывают ли они на один и тот же элемент. Если да, то у вас есть петля. Если нет, повторяйте, пока не найдете петлю или не дойдете до конца списка.

11
ответ дан 9 December 2019 в 22:29
поделиться

На прошлой неделе у меня была точно такая же проблема в реальном коде.

Все, что я сделал, это сохранил указатель (ссылку) для первого элемента. Затем, когда я итерировал список, если я получал этот указатель снова, я знал, что есть цикл.

-1
ответ дан 9 December 2019 в 22:29
поделиться

Вероятно, это та же техника, что и проверка того, является ли граф деревом (у деревьев не бывает циклов), см. этот вопрос. Рекомендуется либо топологическая сортировка, либо поиск по глубине.

1
ответ дан 9 December 2019 в 22:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: