""" Связный список (LinkedListPhoneBook) Узел представляется словарём: {'name': 'Имя', 'phone': '123', 'next': None}. """ def ll_insert(head : dict|None, name: str, phone: str) -> dict: """ Проходит до конца (или сразу добавляет в конец) и возвращает новую голову (если вставка в начало) или изменяет список по ссылке. Удобнее возвращать новую голову, если вставка может быть в начало. """ newNode = {'name': name, 'phone': phone, 'next': None} if head == None: return newNode currentNode = head while currentNode['next'] != None: currentNode = currentNode['next'] currentNode['next'] = newNode return head def ll_find(head : dict|None, name: str) -> str|None: """Ищет узел, возвращает телефон или None.""" currentNode = head while currentNode != None: if currentNode['name'] == name: return currentNode['phone'] currentNode = currentNode['next'] return None def ll_delete(head : dict|None, name: str) -> dict|None: """Удаляет узел, возвращает новую голову.""" if head == None: return None if head['name'] == name: return head['next'] currentNode = head while currentNode['next'] != None: if currentNode['next']['name'] == name: currentNode['next'] = currentNode['next']['next'] return head currentNode = currentNode['next'] return head def ll_list_all(head: dict|None) -> list: """Cобирает все записи в список и сортирует. сортировка вынесена отдельно).""" records = [] currentNode = head while currentNode != None: records.append((currentNode['name'], currentNode['phone'])) currentNode = currentNode['next'] records.sort(key=lambda item: item[0]) return records