Конечно! Задача о развороте списка без использования встроенных функций, таких как `reverse()` или срезов, может быть решена несколькими способами. Вот один из наиболее простых и понятных способов — использовать дополнительный список и перестановку элементов в обратном порядке.
### Пример решения:
```python
def reverse_list(input_list):
# Создаем новый пустой список
reversed_list = []
# Проходим через исходный список, начиная с последнего элемента
for i in range(len(input_list) - 1, -1, -1):
# Добавляем каждый элемент в новый список
reversed_list.append(input_list[i])
return reversed_list
# Пример использования
original_list = [1, 2, 3, 4]
reversed_list = reverse_list(original_list)
print(reversed_list) # Вывод: [4, 3, 2, 1]
```
### Альтернативный способ: обмен местами элементов
Можно также разворачивать список на месте, используя два указателя:
```python
def reverse_list_in_place(input_list):
left = 0
right = len(input_list) - 1
while left < right:
# Обмен значений
input_list[left], input_list[right] = input_list[right], input_list[left]
# Сдвигаем указатели к центру
left += 1
right -= 1
return input_list
# Пример использования
original_list = [1, 2, 3, 4]
reverse_list_in_place(original_list)
print(original_list) # Вывод: [4, 3, 2, 1]
```
### Объяснение:
1. **Первый метод** создает новый список, в который копирует элементы из исходного списка в обратном порядке. В этом случае дополнительная память требует O(n), где n — длина списка.
2. **Второй метод** производит разворот списка "на месте" с использованием двух указателей — с одного конца списка (слева) и с другого (справа). В этом случае память используется O(1), так как мы не создаем новый список.
Вы можете использовать любой из этих способов, чтобы продемонстрировать свои навыки на собеседовании.