head и два целых числа keep и skip. Пройдите по списку от начала и прорежьте его по правилу: первые keep узлов остаются, следующие skip узлов удаляются, затем снова keep узлов остаются, skip удаляются — и так до конца списка. Если в последнем отрезке узлов меньше, чем нужно, просто берите сколько есть.
Верните голову получившегося списка.
Попробуйте обойтись без нового списка — перецепите ссылки в исходном.head=list_node([4, 8, 15, 16, 23, 42, 7, 9]), keep=3, skip=2 → [4, 8, 15, 42, 7, 9]
Оставляем 4, 8, 15, выбрасываем 16 и 23, оставляем 42, 7, 9 — дальше список кончился.
head=list_node([5, 6, 7, 8, 9, 10, 11]), keep=1, skip=1 → [5, 7, 9, 11]
Каждый второй узел уходит: остаются 5, 7, 9, 11.
head=list_node([3, 1, 2]), keep=4, skip=10 → [3, 1, 2]
Узлов меньше, чем keep, поэтому ничего не удаляется.
head=list_node([4, 8, 15, 16, 23, 42, 7, 9]), keep=3, skip=2
[4, 8, 15, 42, 7, 9]
«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 100 тестов на сервере, включая скрытые.