Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
4.6 kB
2
Indexable
Never
from typing import Any


class ListaWpis:
    wart: Any
    nast: 'ListaWpis'
    poprz: 'ListaWpis'

    def __init__(self, wart: Any, nast: 'ListaWpis' = None, poprz: 'ListaWpis' = None):
        self.wart = wart
        self.nast = nast
        self.poprz = poprz

    def dodaj_po_nim(self, wart: Any) -> None:
        node = ListaWpis(wart)

        if self.nast is self:
            self.nast = node
            node.poprz = self
            return None

        if self.nast is None:
            self.nast = node
            node.poprz = self
            return None

        temp = self.nast
        self.nast = node
        node.nast = temp
        temp.poprz = node
        node.poprz = self

    def dodaj_przed_nim(self, wart: Any) -> None:
        node = ListaWpis(wart)

        if self.poprz is self:
            print("Nie można dodać nic przed wartownikiem")
            return None

        temp = self.poprz
        temp.nast = node
        node.nast = self
        self.poprz = node
        node.poprz = temp

class Lista_2k_1w:
    wartownik: ListaWpis(None)

    def __init__(self):
        self.wartownik = ListaWpis(None)
        self.wartownik.poprz = self.wartownik
        self.wartownik.nast = self.wartownik

    def druku(self) -> None:
        if self.wartownik.nast is self.wartownik:
            print("Lista jest pusta")
            return None

        wskaznik = self.wartownik.nast
        drukValue = ''

        while wskaznik is not None:
            if wskaznik.nast is None:
                drukValue += f'{wskaznik.wart} '
            else:
                drukValue += f'{wskaznik.wart}; '
            wskaznik = wskaznik.nast
        print(drukValue)


    def pobierz_el(self, idx: int) -> ListaWpis:
        if self.wartownik.nast is self.wartownik:
            print("Lista jest pusta")
            return None

        licznik = 0
        if idx >= 0:
            wskaznik = self.wartownik.nast
            while wskaznik is not None:
                if licznik == idx:
                    return wskaznik
                licznik += 1
                wskaznik = wskaznik.nast

        licznik = -1
        wskaznik = self.ostatni_el()
        while wskaznik is not self.wartownik:
            if licznik == idx:
                return wskaznik
            licznik -= 1
            wskaznik = wskaznik.poprz



    def ostatni_el(self) -> ListaWpis:
        if self.wartownik.nast is self.wartownik:
            return self.wartownik

        wskaznik = self.wartownik.nast

        while wskaznik.nast is not None:

            wskaznik = wskaznik.nast

        return wskaznik

    def pierwszy_el(self) -> 'ListaWpis':
        return self.wartownik.nast

    def co_drugi(self) -> 'Lista_2k_1w':
        nowalista = Lista_2k_1w()
        if self.wartownik.nast is self.wartownik:
            print("Lista jest pusta")
            return self.wartownik

        wskaznik = self.wartownik.nast
        licznik = 0
        while wskaznik is not None:
            if licznik % 2 == 0:
                nowalista.ostatni_el().dodaj_po_nim(wskaznik.wart)
            licznik += 1
            wskaznik = wskaznik.nast
        return nowalista


    def wyszukaj(self, wart: Any) -> ListaWpis:
        if self.wartownik.nast is self.wartownik:
            print("Lista jest pusta")
            return self.wartownik

        wskaznik = self.wartownik.nast
        while wskaznik is not None:
            if wskaznik.wart == wart:
                return wart
            wskaznik = wskaznik.nast

        return None
    def print_w_tyl(self):
        if self.wartownik.nast is self.wartownik:
            print("Lista jest pusta")
            return self.wartownik
        wskaznik = self.ostatni_el()
        prinValue = ''
        while wskaznik is not self.wartownik:
            if wskaznik.poprz is self.wartownik:
                prinValue += f'{wskaznik.wart} '
            else:
                prinValue += f'{wskaznik.wart}; '
            wskaznik = wskaznik.poprz
        print(prinValue)







lista = Lista_2k_1w()
lista.ostatni_el().dodaj_po_nim('4')
lista.ostatni_el().dodaj_po_nim('71')
lista.ostatni_el().dodaj_po_nim('14')
lista.ostatni_el().dodaj_po_nim('11')
lista.ostatni_el().dodaj_po_nim('2')
lista.ostatni_el().dodaj_po_nim('1')
lista.pierwszy_el().dodaj_przed_nim('3')
lista.ostatni_el().dodaj_przed_nim('143')