Ctrl K

Через одни — другие

Лёгкая
Дан односвязный список head и два целых числа keep и skip. Пройдите по списку от начала и прорежьте его по правилу: первые keep узлов остаются, следующие skip узлов удаляются, затем снова keep узлов остаются, skip удаляются — и так до конца списка. Если в последнем отрезке узлов меньше, чем нужно, просто берите сколько есть. Верните голову получившегося списка. Попробуйте обойтись без нового списка — перецепите ссылки в исходном.
Пример 1
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 — дальше список кончился.

Пример 2
head=list_node([5, 6, 7, 8, 9, 10, 11]), keep=1, skip=1 → [5, 7, 9, 11]

Каждый второй узел уходит: остаются 5, 7, 9, 11.

Пример 3
head=list_node([3, 1, 2]), keep=4, skip=10 → [3, 1, 2]

Узлов меньше, чем keep, поэтому ничего не удаляется.

Ограничения
  • В списке от 1 до 10⁴ узлов
  • 1 ≤ Node.val ≤ 10⁶
  • 1 ≤ keep, skip ≤ 1000
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСлияние отсортированных цепочек ЛёгкаяПроредить отсортированную цепочку ЛёгкаяВырезать узлы с заданным значением ЛёгкаяЦепочка задом наперёд ЛёгкаяСимметричная нитка бус Лёгкая
загружаем Python…
Вход
head=list_node([4, 8, 15, 16, 23, 42, 7, 9]), keep=3, skip=2
Ожидается
[4, 8, 15, 42, 7, 9]

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 100 тестов на сервере, включая скрытые.