from dataclasses import dataclass


@dataclass
class ElementListy: # klasa danych reprezentująca element listy
    wartosc: int
    nastepny: 'ElementListy' = None # domyślnie następny element jest pusty
    # wskazówka typu jest ciągiem znaków, ponieważ nie możemy odwołać się do klasy, która jest właśnie definiowana


glowa = None


# funkcja dodająca element do listy
def dodaj_do_listy(wartosc):
    global glowa  # odwołanie do zmiennej globalnej. bez tego stworzylibyśmy nową zmienną lokalną

    nowy_element = ElementListy(wartosc)  # tworzenie nowego elementu listy bez ustawiania następnego elementu.

    if glowa is None:  # jeśli lista jest pusta
        glowa = nowy_element  # to nowy element staje się głową listy
    else:  # w przeciwnym wypadku
        temp = glowa  # zaczynamy od głowy
        while temp.nastepny is not None:  # i dopóki nie znajdziemy ostatniego elementu
            temp = temp.nastepny  # przechodzimy do następnego elementu
        temp.nastepny = nowy_element  # i ustawiamy następny element ostatniego elementu listy na nowy_element


dodaj_do_listy(1)
print(glowa)
dodaj_do_listy(2)
print(glowa)
dodaj_do_listy(3)
print(glowa)
dodaj_do_listy(4)
print(glowa)
