class Node:  
     def \_\_init\_\_(self, data):  
         self.data=data  
         self.nextNode=None  
  
  
  
class LinkedLIst:  
  
    def \_\_init\_\_(self):  
        self.head = None  
  self.numberOFNodes=0  
  \# Here we get o(1) constant running time complexity for insertion.  
  def insert\_start(self,data):  
  
        self.numberOFNodes=self.numberOFNodes+1  
  new\_node = Node(data)  
  
        if not self.head:  
            self.head=new\_node  
        else:  
            new\_node.nextNode=self.head  
            self.head = new\_node  
 #Linear running time o(n)  
  def insert\_end(self,data):  
        self.numberOFNodes=self.numberOFNodes+1  
  new\_node=Node(data)  
  
        actual\_node=self.head  
  
        while actual\_node.nextNode is not None:  
            actual\_node=actual\_node.nextNode  
  
        actual\_node.nextNode=new\_node  
  
    def size\_of\_list(self):  
  
        actual\_node = self.head  
  
        while actual\_node is not None:  
            print(actual\_node)  
            actual\_node=actual\_node.nextNode  
  
    def traverse(self):  
        actual\_node=self.head  
  
        while actual\_node is not None:  
            print(actual\_node.data)  
            actual\_node=actual\_node.nextNode  
  
    def deleteAtHead(self):  
  
        self.head=self.head.nextNode  
        self.numberOFNodes=self.numberOFNodes-1  
  
  def deleteAtTail(self):  
  
        actual\_node = self.head  
  
        while actual\_node.nextNode.nextNode is not None:  
            actual\_node=actual\_node.nextNode  
  
        actual\_node.nextNode=None  
  self.numberOFNodes=self.numberOFNodes-1  
  
  
  
linked\_list=LinkedLIst()  
linked\_list.insert\_start(4)  
linked\_list.insert\_start(3)  
linked\_list.insert\_start('A String type')  
linked\_list.insert\_start(1.232)  
linked\_list.insert\_end(12.232)  
linked\_list.traverse()  
  
print('Deleting at the front')  
linked\_list.deleteAtHead()  
linked\_list.traverse()  
  
print('Delete at the last position')  
linked\_list.deleteAtTail()  
linked\_list.traverse()