2026-rff_mp/nikolaevda/task1/Zadanie1.py

95 lines
2.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

def ll_insert(head, name, phone):
"""
проходит до конца (или сразу добавляет в конец)
возвращает новую голову (если вставка в начало) или изменяет список по ссылке.
"""
new_node = {'name': name, 'phone': phone, 'next': None}
# в случае пустого списка, новый узел становится головой
if head is None:
return new_node
# в противном случае проходим в конец списка
current = head
while current['next'] is not None:
if current['name'] == name:
current['phone'] = phone
return head
current = current['next']
# проверяем последний узел
if current['name'] == name:
current['phone'] = phone
else:
current['next'] = new_node
return head
def ll_find(head, name):
"""
ищет узел по имени.
возвращает телефон или None
"""
current = head
while current is not None:
if current['name'] == name:
return current['phone']
current = current['next']
return None
def ll_delete(head, name):
"""
удаляет узел по имени.
возвращает новую голову.
"""
# если список пуст
if head is None:
return None
# если удаляем голову
if head['name'] == name:
new_head = head['next']
head['next'] = None
return new_head
# ищем узел для удаления
current = head
while current['next'] is not None:
if current['next']['name'] == name:
target = current['next']
current['next'] = target['next']
target['next'] = None # разрываем связь у удаляемого узла (иными словами, обнуление ссылки)
return head
current = current['next']
return head
def ll_list_all(head):
"""
собирает все записи в список и сортирует
"""
result = []
current = head
while current is not None:
result.append((current['name'], current['phone']))
current = current['next']
# ручная сортировка пузырьком
n = len(result)
for i in range(n):
for j in range(0, n - i - 1):
if result[j][0] > result[j + 1][0]:
result[j], result[j + 1] = result[j + 1], result[j]
return result