Определить точку петли
По (Подход медленного и быстрого указателя) найти узел обнаружения петель
Теперь возьмите указатели P1 и P2, P1 в узле обнаружения петель и P2, начиная с заголовка связанного списка
Пройдите по обоим указателям по одному
Оба указателя встречаются в узле, из-за чего в связанном списке есть петля
Использование стандартного алгоритма быстрого и медленного указателя для поиска точки обнаружения петли
Взять два указателя P1 и P2 в точке обнаружения петли. Поместите указатель P1 в то же место и переместите P2 вперед на один шаг за раз. Повторяйте, пока оба указателя не встретятся вместе. Сохраняйте переменную count для каждой итерации, которая дает длину цикла. Допустим, длина L1
Снова возьмите два указателя P1 и P2. P1 в начале связанного списка и P2 в точке обнаружения петли. Перемещайте оба указателя по одному шагу за раз. Повторяйте, пока оба указателя не встретятся вместе. Эта процедура эквивалентна той, которую мы используем для вычисления узла, который вызывает цикл в связанном списке. Сохраняйте переменную count для каждой итерации равной длине списка до точки слияния. Допустим, длина L2
Теперь длина списка, содержащего цикл, равна L1 + L2
.