Большая задача — двусвязный список.
Простыми словами: это очередь в столовой, где каждый знает и того, кто перед ним,
и того, кто за ним. Поэтому по очереди можно идти в обе стороны.
- Pupil(name) — ученик: свойства prev (кто перед ним) и next (кто за ним), сначала None.
- Queue — очередь: head (первый) и tail (последний).
- add(pupil) — встать в конец;
- remove(index) — выйти из очереди по номеру (0 — первый);
- names() — имена от первого к последнему;
- names_back() — от последнего к первому (идём по prev!).
Большая задача. Не торопись: разбей её на шаги, напиши сначала один класс, проверь его, потом следующий. Готовое решение — после RUN.
Вопрос: Кто будет в очереди после remove(1) и как она выглядит с конца?
Объяснение:
- add: новый.prev = tail, tail.next = новый, tail = новый
- remove: соседи «сцепляются» друг с другом в обход ушедшего
- Если ушёл первый — меняем head, если последний — tail
- names_back идёт от tail по prev
ИИ-помощник закреплён справа внизу. Откройте чат и задайте вопрос по текущему уроку — контекст подставится автоматически.
- «Объясни, зачем нужен id()»
- «Почему не компилируется мой код?»
- «Дай подсказку без полного решения»