Нашли ошибку?

Убрать все отменённые заказы

СложнаяНайти ошибку2 ошибкиГлава 2

#связанные списки#удаление#граничные случаиid: ga-remove-all

Лента заказов — односвязный список кодов. Функция remove_all(head, code) удаляет все узлы с кодом code (отменённые заказы) и возвращает новую голову. В функции две ошибки — найдите и исправьте их.

Примеры

# 7 → 0 → 3 → 0 → 0 → 5
remove_all(head, 0)   # 7 → 3 → 5
# 0 → 0 → 1
remove_all(head, 0)   # 1

Решение

class Node:
    """Узел односвязного списка."""

    def __init__(self, value: int, next: "Node | None" = None) -> None:
        self.value = value
        self.next = next


def remove_all(head: Node | None, code: int) -> Node | None:
    """Удаляет все узлы со значением code, возвращает новую голову."""
    if head is not None and head.value == code:
        head = head.next
    cur = head
    while cur is not None and cur.next is not None:
        if cur.next.value == code:
            cur.next = cur.next.next
        cur = cur.next
    return head

Можно решать и в своём редакторе: «Скопировать с тестами» и запустите python3 remove_all.py — тесты те же, результат покажет ✓ / ✗ и итог.