# Задача 02 — связный список (C++) Даны функции над односвязным списком `Node{int value; Node* next;}`: ```c Node* reverse_list(Node* head); // развернуть список на месте, вернуть новую голову Node* find_middle(Node* head); // середина; для чётной длины — второй из двух средних bool has_cycle(Node* head); // есть ли цикл ``` Требования: - никаких аллокаций, O(1) дополнительной памяти, один проход там, где это возможно; - `find_middle` и `has_cycle` — через два указателя (медленный/быстрый); - корректная работа с пустым списком и списком из одного узла. Проверка: `python3 grade.py 02`. Критерий: все `ok`, ASAN/UBSAN чистые (утечки в тесте считаются ошибкой — тест сам освобождает память).