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