TGViewer
C++ Academy C++ Academy @cpluspluc · 15.5K subscribers
Post #1553 1.44K
💡 Алгоритм Флойда находит цикл в связном списке всего с двумя указателями и `O(1)` дополнительной памяти.

Идея простая:

slow двигается на 1 узел
fast — на 2

Если цикл есть, они обязательно встретятся.

После встречи один указатель возвращаем в head, а дальше оба двигаем по одному узлу. Следующая точка встречи — точное начало цикла.


Node *detect_cycle(Node *head) {
Node *slow = head, *fast = head;

while (fast && fast->next) {
slow = slow->next;
fast = fast->next->next;

if (slow == fast) {
slow = head;

while (slow != fast) {
slow = slow->next;
fast = fast->next;
}

return slow;
}
}

return NULL;
}


Сложность:


O(n) по времени
O(1) по памяти


Один из самых красивых примеров того, как простая математика по модулю превращается в очень практичный алгоритм.
  • ❤ 9
  • 👍 4
More from @cpluspluc
  1. Sep 18, 2026Как посчитать миллиарды уникальных значений, используя всего несколько килобайт памяти Для…
  2. Sep 17, 2026⚙️ useful_abstractions - вычисления на этапе компиляции в C++23 Библиотека упрощает работу…
  3. Sep 17, 2026Разница между C++ и Python
  4. Sep 17, 2026«Я про бэкенд»: как устроены AI-системы под капотом бигтеха 🗓 3 октября, Москва и онлайн…
  5. Sep 16, 2026photo post
  6. Sep 16, 2026🔥 Приглашаем на бесплатный открытый вебинар курса «Программист С»: «Указатели в Си — от а…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →