from __future__ import annotations from dataclasses import dataclass from typing import Any, Optional @dataclass class _Node: """A node in a linked list. Note that this is considered a "private class", one which is only meant to be used in this module by the LinkedList class, but not by client code. Instance Attributes: - item: The data stored in this node. - next: The next node in the list, if any. """ item: Any next: Optional[_Node] = None # By default, this node does not link to any other node class LinkedList: """A linked list implementation of the List ADT. """ # Private Instance Attributes: # - _first: The first node in this linked list, or None if this list is empty. _first: Optional[_Node] def __init__(self) -> None: """Initialize an empty linked list. """ self._first = None def print_items(self) -> None: curr = self._first while curr is not None: print(curr.item) curr = curr.next def __getitem__(self, i: int) -> Any: return 5 # Check Notion # linky._first = _Node('a', _Node('b', _Node('c')))