diff --git a/05-seznamy/jednosmerne-na-konec.py b/05-seznamy/jednosmerne-na-konec.py
new file mode 100755
index 0000000000000000000000000000000000000000..b83207d1b3d346026b296f9600b29d4c9e2e3a4c
--- /dev/null
+++ b/05-seznamy/jednosmerne-na-konec.py
@@ -0,0 +1,37 @@
+#!/usr/bin/python3
+# Obousměrné spojové seznamy s předáváním na konec
+
+import sys
+
+class MyNode:
+    def __init__(self, x):
+        # Každy prvek si pamatuje hodnotu a následníka
+        self.value = x
+        self.next = None
+
+class MyList:
+    def __init__(self):
+        # Seznam si pamatuje odkaz na svůj první a poslední prvek
+        self.first = None
+        self.last = None
+
+    def append(self, x):
+        """Zapojí prvek se zadanou hodnotu na konec seznamu."""
+        n = MyNode(x)
+        if self.last:
+            self.last.next = n
+        else:
+            self.first = n
+        self.last = n
+
+    def print(self):
+        n = self.first
+        while n:
+            print(n.value)
+            n = n.next
+
+l = MyList()
+for a in sys.stdin:
+    l.append(int(a))
+
+l.print()
diff --git a/05-seznamy/jednosmerne-na-zacatek.py b/05-seznamy/jednosmerne-na-zacatek.py
new file mode 100755
index 0000000000000000000000000000000000000000..2e7ea21b3ed580e866883035b9cbb26203335212
--- /dev/null
+++ b/05-seznamy/jednosmerne-na-zacatek.py
@@ -0,0 +1,33 @@
+#!/usr/bin/python3
+# Obousměrné spojové seznamy s předáváním na začátek
+
+import sys
+
+class MyNode:
+    def __init__(self, x):
+        # Každy prvek si pamatuje hodnotu a následníka
+        self.value = x
+        self.next = None
+
+class MyList:
+    def __init__(self):
+        # Seznam si pamatuje odkaz na svůj první prvek
+        self.first = None
+
+    def prepend(self, x):
+        """Zapojí prvek se zadanou hodnotu na začátek seznamu."""
+        n = MyNode(x)
+        n.next = self.first
+        self.first = n
+
+    def print(self):
+        n = self.first
+        while n:
+            print(n.value)
+            n = n.next
+
+l = MyList()
+for a in sys.stdin:
+    l.prepend(int(a))
+
+l.print()
diff --git a/05-seznamy/obousmerne.py b/05-seznamy/obousmerne.py
new file mode 100755
index 0000000000000000000000000000000000000000..4aba29035c960a8a11cf2a044eb59a737ef42131
--- /dev/null
+++ b/05-seznamy/obousmerne.py
@@ -0,0 +1,55 @@
+#!/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 != 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()