Task 24. Найти цикл в односвязном списке
UniLecsЗадача: проверить, есть ли цикл в односвязном списке.
Идея: задача имеет несколько решений:
- Будем идти по списку и помечать узлы, ктр мы посетили. Если на очередной итерации мы встретим узел, в ктр уже были, тогда цикл существует.
- Классическое решение с двумя указателями и с разными шагами. Один указатель будет перемещаться на один узел, второй на два. Если эти два указателя встречаются, то тогда мы нашли цикл. Здесь суть в том, что если в списке есть зацикленность, то второй указатель "догонит" первый, т.к. идет в два раза быстрее.
Реализация:
https://gist.github.com/unilecs/06fe6b9468e1e080f7720bc5ff0b79b7
P.S. @mrmeison также прислал нам свою реализацию с помощью двух указателей
https://gist.github.com/unilecs/1e0643239837be68fcaf897b5b243921