In [10]:
class Node:
    def __init__(self, data = None, next = None):
        self.data = data
        self.next = next
    
    def __str__(self):
        return str(self.data)

In [63]:
class LinkedList:
    
    def __init__(self):
        self.head = None
        self.tail = None
    
    def insert(self, node):
        if not self.isEmpty():
            self.tail.next = node
        else:
            self.head = node
        self.tail = node
    
    def remove(self):
        if not self.isEmpty():
            data = self.head.data
            self.head = self.head.next
            if self.head is None:
                self.tail = None
            return data
        return None
    
    def isEmpty(self):
        return self.head == None
    
    def printList(self):
        cur = self.head
        print("[",end="")
        while cur:
            print(cur,end="")
            if cur.next:
                print(",",end="")
            cur = cur.next
        print("]")
    
    def printBackwards(self):
        print("[",end="")
        self._printBackwards(self.head)
        print("]")

    def _printBackwards(self, node):
        if node:
            self._printBackwards(node.next)
            if node.next:
                print(",",end="")
            print(node,end="")

In [64]:
myList = LinkedList()
myList.insert(Node("first"))
myList.insert(Node("second"))
myList.insert(Node("third"))
myList.printList()
myList.printBackwards()


[first,second,third]
[third,second,first]

In [ ]: