Задача. Дан список надо его развернуть

Меняем местами симметричные элементы списка: первый с последним, второй с предпоследним и так до середины. Список изменяется на месте за O(n) времени и O(1) дополнительной памяти.

Короткий ответ

Что ответить на собеседовании

Меняем местами симметричные элементы списка: первый с последним, второй с предпоследним и так до середины. Список изменяется на месте за O(n) времени и O(1) дополнительной памяти.

Подробный разбор

Ответ с пояснениями

Условие

Задача. Дан список надо его развернуть

#z = [1, 2, 3, 4, 5] # В итоге должен получиться список [5, 4, 3, 2, 1] #Необходимо реализовать функцию, которая развернет список.

Встроенные способы (z[::-1] z.reverse() reversed(z)) использовать нельзя.

#Новые списки создавать нельзя. Желательно использовать цикл for def reverse(lst: list) -> list: ...

Ответ

Меняем местами симметричные элементы списка: первый с последним, второй с предпоследним и так до середины. Список изменяется на месте за O(n) времени и O(1) дополнительной памяти.

Новый список не создаётся:

def reverse(lst: list) -> list:
    for left in range(len(lst) // 2):
        right = len(lst) - 1 - left
        lst[left], lst[right] = lst[right], lst[left]
    return lst

Для [1, 2, 3, 4, 5] получится [5, 4, 3, 2, 1]. У списка нечётной длины средний элемент остаётся на месте. Пустой список и список из одного элемента не требуют перестановок. Возвращается тот же объект, поэтому изменение будет видно через другие ссылки на него.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее