text: class Node:
      def __init__(self, data):
          self.data = data;
          self.next = None
  
  
  class Linkedlist:
      def __init__(self):
          self.head = None
  
      def print_list(self):
          temp = self.head
          while temp is not None:
              print(temp.data)
              temp = temp.next
  
  # adding nodes
      def push(self, new_data):
          new_node = Node(new_data)
          new_node.next = self.head
          self.head = new_node
  
  # swapping nodes
      def swapNodes(self, d1, d2):
          prevD1 = None
          prevD2 = None
          if d1 == d2:
              return
          else:
              # find d1
              D1 = self.head
              while D1 is not None and D1.data != d1:
                  prevD1 = D1
                  D1 = D1.next
                  # find d2
              D2 = self.head
              while D2 is not None and D2.data != d2:
                  prevD2 = D2
                  D2 = D2.next
              if D1 is None and D2 is None:
                  return
              # if D1 is head
              if prevD1 is not None:
                  prevD1.next = D2
              else:
                  self.head = D2
              # if D2 is head
              if prevD2 is not None:
                  prevD2.next = D1
              else:
                  self.head = D1
              temp = D1.next
              D1.next = D2.next
              D2.next = temp
  
  # swapping code ends here
  
  
  
  if __name__ == '__main__':
      list = Linkedlist()
      list.push(5)
      list.push(4)
      list.push(3)
      list.push(2)
      list.push(1)
  
      list.print_list()
  
      list.swapNodes(1, 4)
      print("After swapping")
      list.print_list()
  
  
  
  