Riešenie úloh 2. cvičenia


  1. Riešenie pre prvý spájaný zoznam:

    's' -> 'o' -> 'v' -> 'a' -> None
    

    Riešenie pre druhý spájaný zoznam:

    'V' -> 'I' -> 'R' -> 'U' -> 'S' -> None
    

  1. Riešenie:

    z = Vrchol(3.14, Vrchol('6.28', Vrchol(9.42, Vrchol(None, Vrchol(15.7)))))
    vypis(z)
    z = vyrob((3.14, '6.28', 9.42, None, 15.7))
    vypis(z)
    

  1. Riešenie:

    >>> zoz = vyrob(range(4, 32, 7))
    >>> vypis(zoz)
        4 -> 11 -> 18 -> 25 -> None
    >>> zoz.next.data = (10, 12)
    >>> vypis(zoz)
        4 -> (10, 12) -> 18 -> 25 -> None
    

  1. Riešenie:

    >>> zoz = vyrob('strc prst skrz krk'.split())
    >>> vypis(zoz)
        'strc' -> 'prst' -> 'skrz' -> 'krk' -> None
    >>> zoz.next.next = Vrchol({1: 2}, zoz.next.next)
    >>> vypis(zoz)
        'strc' -> 'prst' -> {1: 2} -> 'skrz' -> 'krk' -> None
    

  1. Riešenie:

    def zmen_parne(zoznam, hodnota=0):
        while zoznam is not None:
            if isinstance(zoznam.data, int) and zoznam.data % 2 == 0:
                zoznam.data = hodnota
            zoznam = zoznam.next
    

  1. Riešenie:

    def pocty(zoznam, hodnota=0):
        p1 = p2 = 0
        while zoznam is not None:
            try:
                if zoznam.data > hodnota:
                    p1 += 1
                if zoznam.data < hodnota:
                    p2 += 1
            except TypeError:
                pass
            zoznam = zoznam.next
        return p1, p2
    

  1. Riešenie:

    def zdvoj(zoznam):
        while zoznam is not None:
            try:
                zoznam.data *= 2
            except TypeError:
                pass
            zoznam = zoznam.next
    

  1. Riešenie:

    def to_str(zoznam):
        vysl = []
        while zoznam is not None:
            vysl.append(repr(zoznam.data))
            zoznam = zoznam.next
        vysl.append('None')
        return ' -> '.join(vysl)
    

  1. Riešenie:

    1 -> 3 -> 5 -> 9 -> 7 -> 11 -> 13 -> None
    

    Päť priradení vymení navzájom štvrtý a piaty prvok.


  1. Riešenie:

    def vyhod_prvy(zoznam):
        if zoznam is None:
            return None
        return zoznam.next
    

  1. Riešenie:

    def vyhod_druhy(zoznam):
        if zoznam is not None and zoznam.next is not None:
            zoznam.next = zoznam.next.next
    

  1. Riešenie:

    def vyhod_za(zoznam, hodnota):
        while zoznam is not None:
            if zoznam.data == hodnota:
                if zoznam.next is not None:
                    zoznam.next = zoznam.next.next
                return
            zoznam = zoznam.next
    

  1. Riešenie:

    def vyhod_posledny(zoznam):
        if zoznam is None or zoznam.next is None:
            return None
        pom = zoznam
        while pom.next.next is not None:
            pom = pom.next
        pom.next = None
        return zoznam
    

  1. Riešenie:

    def vyhod_kazdy_druhy(zoznam):
        while zoznam is not None and zoznam.next is not None:
            zoznam.next = zoznam.next.next
            zoznam = zoznam.next
    

  1. Riešenie:

    def pocet(zoznam):
        if zoznam is None:
            return 0
        return 1 + pocet(zoznam.next)
    

  1. Riešenie:

    def sucet(zoznam):
        if zoznam is None:
            return 0
        if isinstance(zoznam.data, (int, float)):
            return zoznam.data + sucet(zoznam.next)
        return sucet(zoznam.next)
    

  1. Riešenie:

    def spoj(zoz1, zoz2):
        if zoz1 is None:
            return zoz2
        pom = zoz1
        while pom.next is not None:
            pom = pom.next
        pom.next = zoz2
        return zoz1
    

  1. Riešenie:

    def prevratena_kopia(zoznam):
        vysl = None
        while zoznam is not None:
            vysl = Vrchol(zoznam.data, vysl)
            zoznam = zoznam.next
        return vysl
    

  1. Riešenie:

    def mapuj(funkcia, zoznam):
        while zoznam is not None:
            try:
                zoznam.data = funkcia(zoznam.data)
            except:
                pass
            zoznam = zoznam.next
    

  1. Riešenie:

    def filtruj(podmienka, zoznam):
        while zoznam is not None and not podmienka(zoznam.data):
            zoznam = zoznam.next
        if zoznam is None:
            return None
        pom = zoznam
        while pom.next is not None:
            if podmienka(pom.next.data):
                pom = pom.next
            else:
                pom.next = pom.next.next
        return zoznam