class Node:#create a Node
    def __int__(self,data):
        self.data=data#given data
        self.next=None#given next to None
class Linked_List:
    
    pass
    
    def insert_tail(Head,data):
        if(Head.next is None):
            Head.next = Node(data)
        else:
            insert_tail(Head.next, data)

    def insert_head(Head,data):
        tamp = Head
        if (tamp == None):
            newNod = Node()#create a new Node
            newNod.data = data
            newNod.next = None
            Head = newNod#make new node to Head       
        else:
            newNod = Node()
            newNod.data = data
            newNod.next = Head#put the Head at NewNode Next
            Head=newNod#make a NewNode to Head
        return Head   
    
    def printList(Head):#print every node data
        tamp=Head
        while tamp!=None:
            print(tamp.data)
            tamp=tamp.next
    
    def delete_head(Head):#delete from head
        if Head!=None:
            Head=Head.next
        return Head#return new Head
    
    def delete_tail(Head):#delete from tail
        if Head!=None:
            tamp = Node()
            tamp = Head
            while (tamp.next).next!= None:#find the 2nd last element
                tamp = tamp.next
            tamp.next=None#delete the last element by give next None to 2nd last Element
        return Head

    def isEmpty(Head):
        return Head is None #Return if Head is none
    
    def reverse(Head):
        prev = None
        current = Head
        
        while(current):
            # Store the current node's next node. 
            next_node = current.next
            # Make the current node's next point backwards
            current.next = prev
            # Make the previous node be the current node
            prev = current
            # Make the current node the next node (to progress iteration)
            current = next_node
        # Return prev in order to put the head at the end 
        Head = prev