#!/usr/bin/python3 # Obousměrné spojové seznamy s hlavou import sys class MyNode: def __init__(self, x): # Prvek si pamatuje hodnotu a odkaz na předchůdce i následníka self.value = x self.prev = None self.next = None class MyList: def __init__(self): # Seznam vždy držíme za hlavu: speciální prvek, který nenese žádnou # užitečnou hodnotu. self.head = MyNode(None) self.head.prev = self.head.next = self.head def insert_node(self, n, after): """Zapojí prvek n za prvek after.""" before = after.next # Pozor, before se může rovnat after n.prev = after n.next = before before.prev = n after.next = n def prepend_node(self, n): """Zapojí prvek n na začátek seznamu (za hlavu).""" self.insert_node(n, self.head) def append_node(self, n): """Zapojí prvek n na konec seznamu (tedy za předchůdce hlavy).""" self.insert_node(n, self.head.prev) def prepend(self, x): """Zapojí prvek se zadanou hodnotu na začátek seznamu.""" return self.prepend_node(MyNode(x)) def append(self, x): """Zapojí prvek se zadanou hodnotu na konec seznamu.""" return self.append_node(MyNode(x)) def print(self): n = self.head.next while n is not self.head: print(n.value) n = n.next l = MyList() for a in sys.stdin: l.prepend(int(a)) l.append(int(a)) l.print()