1.1 KiB
1.1 KiB
Задача 02 — связный список (C++)
Даны функции над односвязным списком Node{int value; Node* next;}:
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 чистые (утечки в тесте
считаются ошибкой — тест сам освобождает память).