Ctrl K

Разворот списка блоками

Сложная
Дана голова односвязного списка head и число size. Разбейте список на последовательные блоки по size узлов, считая от начала, и разверните порядок узлов внутри каждого полного блока. Если в конце осталось меньше size узлов, этот хвост не трогайте. Менять значения в узлах нельзя — переставлять нужно сами узлы. Верните голову получившегося списка. Попробуйте обойтись O(1) дополнительной памяти.
Пример 1
head=list_node([10, 20, 30, 40, 50, 60, 70, 80]), size=3 → [30, 20, 10, 60, 50, 40, 70, 80]

Блоки [10, 20, 30] и [40, 50, 60] разворачиваются, хвост [70, 80] короче трёх и остаётся как есть.

Пример 2
head=list_node([5, 6, 7, 8]), size=4 → [8, 7, 6, 5]

Весь список — один блок, он разворачивается целиком.

Пример 3
head=list_node([1, 2, 3]), size=1 → [1, 2, 3]

Блок из одного узла после разворота не меняется.

Ограничения
  • Количество узлов в списке — n
  • 1 ≤ size ≤ n ≤ 5000
  • 0 ≤ Node.val ≤ 1000
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСложение чисел-списков СредняяСлияние отсортированных цепочек ЛёгкаяОбмен соседей парами СредняяСписок, сложенный с двух концов СредняяВырезать узлы с заданным значением Лёгкая
загружаем Python…
Вход
head=list_node([10, 20, 30, 40, 50, 60, 70, 80]), size=3
Ожидается
[30, 20, 10, 60, 50, 40, 70, 80]

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