class Uzel: """uzel spojového seznamu""" def __init__(self, x = None): self.info = x # uložená hodnota self.dalsi = None # následník """ Origininální vytvor(), která umí číst pouze ze standardního vstupu. Při programování (debugování) je to nepraktické, proto si napřed kód upravím tak, aby testovací vstup ze zadání byl přímo v kódu a při spuštění programu se na něm rovnou zavolal výpočet. """ # def vytvor(): # n = int(input()) # if n == 0: # return None # s = input().split() # p = Uzel(int(s[0])) # k = p # for i in range(1, n): # t = Uzel(int(s[i])) # k.dalsi = t # k = t # return p """ První pokus - copy-paste, místo input() napevno vložím stringy, které by ta původní verze načetla. """ # def vytvor_pevne(): # n = int("9") # if n == 0: # return None # s = "10 90 30 20 90 30 30 10 70".split() # p = Uzel(int(s[0])) # k = p # for i in range(1, n): # t = Uzel(int(s[i])) # k.dalsi = t # k = t # return p """ Copy-paste s drobnou úpravou je ale nevhodné (viz princip Don't-Repeat-Yourself). Lepší řešení je přesunout "hlavní logiku" z vytvor() do zobecněné vytvor_z_arg(n,data), a v původní vytvor() jen volat tuto obecnější funkci s vhodnými argumenty. """ def vytvor(): n = int(input()) data = input().split() return vytvor_z_arg(n, data) def vytvor_z_arg(n, data): if n == 0: return None s = data.split() p = Uzel(int(s[0])) k = p for i in range(1, n): t = Uzel(int(s[i])) k.dalsi = t k = t return p def vypis(p): if p == None: print('PRAZDNY') return s = p while s != None: print(s.info, end = " ") s = s.dalsi print() def zrus_max(p): # kdyz je seznam prazdny, rovnou vratim prazdny seznam if p == None: return None # napred najdu Uzel, v nemz je maximum kdemax = p q = p while q.dalsi != None: if q.dalsi.info > kdemax.info: predmax = q kdemax = q.dalsi q = q.dalsi # a pak ten uzel smazu if kdemax == p: return p.dalsi else: predmax.dalsi = kdemax.dalsi return p def obrat(p): ... def zrus_vsechny(p, x): ... def pridej(p, x): ... def zrus_dva_posledni(p): ... def zrus_sude_pozice(p): ... def pridej_kopii(p): ... # a = vytvor() # a = vytvor_pevne() a = vytvor_z_arg(9, "10 90 30 20 90 30 30 10 70") vypis(a) a = zrus_max(a); vypis(a) a = obrat(a) vypis(a) a = zrus_vsechny(a, 30); vypis(a) a = pridej(a, 50); vypis(a) a = zrus_dva_posledni(a); vypis(a) a = zrus_sude_pozice(a); vypis(a) a = pridej_kopii(a); vypis(a)