Task 24. Найти цикл в односвязном списке

Task 24. Найти цикл в односвязном списке

UniLecs

Задача: проверить, есть ли цикл в односвязном списке.

односвязный список с циклом

Идея: задача имеет несколько решений:

  1. Будем идти по списку и помечать узлы, ктр мы посетили. Если на очередной итерации мы встретим узел, в ктр уже были, тогда цикл существует.
  2. Классическое решение с двумя указателями и с разными шагами. Один указатель будет перемещаться на один узел, второй на два. Если эти два указателя встречаются, то тогда мы нашли цикл. Здесь суть в том, что если в списке есть зацикленность, то второй указатель "догонит" первый, т.к. идет в два раза быстрее.

Реализация:

реализация на JS

https://gist.github.com/unilecs/06fe6b9468e1e080f7720bc5ff0b79b7


P.S. @mrmeison также прислал нам свою реализацию с помощью двух указателей

реализация на JS

https://gist.github.com/unilecs/1e0643239837be68fcaf897b5b243921

Report Page