Ctrl K

Сократить нулевые участки

Средняя
Дан односвязный список целых чисел head. Участок — это один или несколько подряд идущих узлов. Пока в списке есть участок с суммой 0, удаляйте его по правилу: - из всех участков с нулевой суммой берите тот, что начинается левее всех; - если таких несколько, берите самый длинный. Когда участков с нулевой суммой не останется, верните голову получившегося списка (возможно, пустого).
Пример 1
head=list_node([4, 2, -6, 5, 1]) → [5, 1]

Самый левый участок с нулевой суммой — 4, 2, -6. После его удаления остаётся [5, 1], и нулевых участков больше нет.

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

Самый левый нулевой участок начинается с 1, длиннейший из них — 1, -1, 2, -2. Остаётся [3, 7].

Пример 3
head=list_node([5, -5, 0]) → None

Весь список в сумме даёт 0 и удаляется целиком — ответ пустой.

Ограничения
  • В списке от 1 до 10⁴ узлов
  • -1000 ≤ Node.val ≤ 1000
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиОтмеченные отрезки цепочки СредняяТолько уникальные значения в списке СредняяВычистить запрещённые значения СредняяСколько раз встретилось каждое значение ЛёгкаяСложение чисел-списков Средняя
загружаем Python…
Вход
head=list_node([4, 2, -6, 5, 1])
Ожидается
[5, 1]

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