Узлы, ссылки и обход — структура, из которой строят многое.
⏱️ ~30 мин·Средний·📚 2 урока
Список из узлов
Питоновский list хранит элементы рядом в памяти. Связный списокИзменяемая упорядоченная коллекция элементов: [1, 2, 3]. По-английски list. устроен иначе: это цепочка узлов, где каждый узел хранит своё значение и ссылку на следующий узел. Как вагоны поезда: каждый сцеплен со следующим, а последний ни с кем (его ссылка — None).
Чтобы описать узел, заведём простой классШаблон для создания объектов: описывает их данные (атрибуты) и поведение (методы). с двумя полями: value (значение) и next (ссылка на следующий узел).
▶ node.py
📝Заметка
Здесь мы используем класс — подробно классы разбираются в модуле про ООП. Сейчас достаточно понимать: class Node описывает «узел», а self.value и self.next — это его поля. Node(1) создаёт узел со значением 1 и пустой ссылкой.
Обход связного списка
Чтобы пройти по всем узлам, начинают с первого (его называют head, голова) и двигаются по ссылкам next, пока не упрутся в None. Это типичный паттерн «бегунка» (current).
▶ traverse.py
Добавление в начало
Сила связного списка — в дешёвой вставке. Чтобы добавить элемент в начало, создаём новый узел, направляем его next на текущую голову и объявляем его новой головой. Не нужно ничего сдвигать, как в обычном списке.
▶ prepend.py
💡Совет
Предскажите вывод.ФункцияИменованный блок кода, который можно вызывать многократно. Может принимать аргументы и возвращать результат. ниже считает длину связного списка, идя по ссылкам. Сколько узлов в цепочке 1 -> 2 -> 3 -> 4? Запустите и проверьте.
▶ predict-length.py
Вернётся 4. Бегунок проходит все узлы, прибавляя единицу на каждом, пока не дойдёт до None после последнего узла.
⚠️ Частые ошибки новичков
Ошибка. Забыть продвинуть бегунок current = current.next внутри циклаКонструкция, повторяющая блок кода: for перебирает элементы, while — пока условие истинно.. Тогда current навсегда останется на первом узле, условие while current всегда истинно и цикл зациклится. Запустите сломанный код (прервите его) и почините, добавив шаг.
▶ broken-traverse.py
Заданиерешение.py
Дана голова связного списка из узлов Node. Напишите функцию to_list(head), собирающую значения всех узлов в обычный список Python по порядку.
Заданиерешение.py
Напишите функцию find(head, target), возвращающую True, если значение target встречается в связном списке, и False иначе.
❓Проверь себя
Что хранит каждый узел односвязного списка?
Чем оканчивается односвязный список?
В чём преимущество вставки в начало связного списка?
ℹ️Важно
✅ Что вы узнали
Связный список — цепочка узлов, каждый со ссылкой next.
Узел описывают классом с полями value и next.
Обход идёт бегунком от головы, пока current не станет None.
Вставка в начало дешёвая — не нужно сдвигать элементы.
Главное в цикле обхода — не забыть current = current.next.
Комментарии
Загрузка…
Загрузка комментариев…