stacks with singly linked list python code example

Example: use a singly linked list create a stack python

'''Python supports automatic garbage collection so deallocation of memory 
is done implicitly. However to force it to deallocate each node after use, 
add the following code: 
  
    import gc         #added at the start of program 
    gc.collect()     #to be added wherever memory is to be deallocated 
'''
  
class Node: 
      
    # Class to create nodes of linked list 
    # constructor initializes node automatically 
    def __init__(self,data): 
        self.data = data 
        self.next = None
      
class Stack: 
      
    # head is default NULL 
    def __init__(self): 
        self.head = None
      
    # Checks if stack is empty 
    def isempty(self): 
        if self.head == None: 
            return True
        else: 
            return False
      
    # Method to add data to the stack 
    # adds to the start of the stack 
    def push(self,data): 
          
        if self.head == None: 
            self.head=Node(data) 
              
        else: 
            newnode = Node(data) 
            newnode.next = self.head 
            self.head = newnode 
      
    # Remove element that is the current head (start of the stack) 
    def pop(self): 
          
        if self.isempty(): 
            return None
              
        else: 
            # Removes the head node and makes  
            #the preceeding one the new head 
            poppednode = self.head 
            self.head = self.head.next
            poppednode.next = None
            return poppednode.data 
      
    # Returns the head node data 
    def peek(self): 
          
        if self.isempty(): 
            return None
              
        else: 
            return self.head.data 
      
    # Prints out the stack      
    def display(self): 
          
        iternode = self.head 
        if self.isempty(): 
            print("Stack Underflow") 
          
        else: 
              
            while(iternode != None): 
                  
                print(iternode.data,"->",end = " ") 
                iternode = iternode.next
            return
          
# Driver code 
MyStack = Stack() 
  
MyStack.push(11)  
MyStack.push(22) 
MyStack.push(33) 
MyStack.push(44) 
  
# Display stack elements  
MyStack.display() 
  
# Print top element of stack  
print("\nTop element is ",MyStack.peek()) 
  
# Delete top elements of stack  
MyStack.pop() 
MyStack.pop() 
  
# Display stack elements 
MyStack.display() 
  
# Print top element of stack  
print("\nTop element is ", MyStack.peek())  
  
# This code is contributed by Mathew George