from typing import Any, Dict, List, Optional Node = Dict[str, Any] def _make_node(name: str, phone: str) -> Node: return {"name": name, "phone": phone, "next": None} def sort_records(records: List[Dict[str, str]]) -> List[Dict[str, str]]: return sorted(records, key=lambda x: x["name"]) def ll_insert(head: Optional[Node], name: str, phone: str) -> Node: new_node = _make_node(name, phone) if head is None: return new_node current = head while current is not None: if current["name"] == name: current["phone"] = phone return head if current["next"] is None: current["next"] = new_node return head current = current["next"] return head def ll_find(head: Optional[Node], name: str) -> Optional[str]: current = head while current is not None: if current["name"] == name: return current["phone"] current = current["next"] return None def ll_delete(head: Optional[Node], name: str) -> Optional[Node]: if head is None: return None if head["name"] == name: return head["next"] prev = head current = head["next"] while current is not None: if current["name"] == name: prev["next"] = current["next"] return head prev = current current = current["next"] return head def ll_list_all(head: Optional[Node]) -> List[Dict[str, str]]: records: List[Dict[str, str]] = [] current = head while current is not None: records.append({"name": current["name"], "phone": current["phone"]}) current = current["next"] return sort_records(records)