Обнаружение цикла в связном списке
Дан односвязный список head. Верните true, если в списке есть цикл, и false в противном случае.
Цикл в связном списке существует, если хотя бы один узел может быть посещен повторно, следуя по указателю next.
Ограничения:
- Длина списка:
1 <= длина <= 1000. - Значение узла:
-1000 <= Node.val <= 1000. - Параметр
index(не передается в функцию) определяет индекс начала цикла, если он существует. Еслиindex = -1, цикл отсутствует.
Пример 1:
Input: head = [1, 2, 3, 4], index = 1 Output: true
Пример 2:
Input: head = [1], index = -1 Output: false
Рекомендуемая временная и пространственная сложность
Вам следует стремиться к решению с временной сложностью O(n) и пространственной сложностью
O(1) для оптимального подхода.
Подсказка 1
Решение грубой силы заключалось бы в использовании хеш-таблицы для хранения посещенных узлов. Это было бы решение
с временной сложностью O(n) и пространственной сложностью O(n). Можете ли вы придумать
более эффективный способ?
Подсказка 2
Можно ли использовать два указателя, движущихся с разной скоростью, чтобы обнаружить цикл?
Подсказка 3
Используйте метод "черепахи и зайца" (алгоритм Флойда), чтобы обнаружить цикл без использования дополнительной памяти.

