Last active
          November 25, 2022 18:01 
        
      - 
      
 - 
        
Save jatinsharrma/75d913140dbfb95895fa07b093e53f8d to your computer and use it in GitHub Desktop.  
    Linked List : simple Linked List
  
        
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | #------------------------------------------- | |
| #------------Simple Linked List------------- | |
| #------------------------------------------- | |
| # Node Class | |
| class Node: | |
| def __init__(self, data): | |
| self.data = data | |
| self.link = None | |
| # this method return node's link | |
| def getLink(self): | |
| return self.link | |
| # this method sets node's link | |
| def setLink(self,link): | |
| self.link = link | |
| # this method return node's data | |
| def getData(self): | |
| return self.data | |
| # this method sets node's data | |
| def setValue(self,data): | |
| self.data = data | |
| # Linked List class | |
| class LinkedList: | |
| def __init__(self): | |
| self.root = None | |
| # this method return linked list's root | |
| def getRoot(self): | |
| return self.root | |
| # this method append new node to the very end | |
| def append(self, data): | |
| if self.root is None: | |
| self.root = Node(data) | |
| else: | |
| current = self.root | |
| while current.getLink() is not None: | |
| current = current.getLink() | |
| current.setLink(Node(data)) | |
| # this method traverse the linked list | |
| def traverse(self): | |
| if self.root is None: | |
| return False | |
| current = self.root | |
| data = [] | |
| while current is not None: | |
| data.append(current.getData()) | |
| current = current.getLink() | |
| return data | |
| # this method delete node from linked list | |
| def delete(self,value): | |
| if self.root is None: | |
| return False | |
| if self.root.getData() == value : | |
| self.root = self.root.getLink() | |
| return | |
| current = self.root | |
| old = None | |
| while current is not None: | |
| old = current | |
| current = current.getLink() | |
| if current.getData() == value: break | |
| if current is None: return False | |
| old.setLink(current.getLink()) | |
| return True | |
| # this method insert new node after specified node | |
| def insert (self, value, data): | |
| if self.root is None: | |
| return False | |
| current = self.root | |
| while current is not None: | |
| if current.getData() == value: break | |
| current = current.getLink() | |
| if current is None: return False | |
| new_node = Node(data) | |
| new_node.setLink(current.getLink()) | |
| current.setLink(new_node) | |
| return True | |
| # this method search for desired node | |
| def search(self,value): | |
| if self.root is None: return False | |
| current = self.root | |
| index = 0 | |
| while current is not None: | |
| if current.getData() == value: break | |
| current = current.getLink() | |
| index += 1 | |
| if current is None: return False | |
| return index | |
| # this method counts number of nodes in linked list | |
| # recursive method | |
| def count (self, node): | |
| if node is None: return 0 | |
| return 1 + self.count(node.getLink()) | |
| # this method reverse the linked list | |
| def reverse(self): | |
| if self.root is None: return False | |
| root = None | |
| current = self.root | |
| while current: | |
| node = Node(current.getData()) | |
| node.setLink(root) | |
| root = node | |
| current = current.getLink() | |
| self.root = root | |
| return True | |
| # Testing | |
| if __name__ == "__main__": | |
| linked_list = LinkedList() | |
| data = [1,2,3,4,5,6,7,8,9] | |
| for i in data: | |
| linked_list.append(i) | |
| linked_list.delete(1) | |
| print("Elements is linked list : ",linked_list.traverse()) | |
| linked_list.insert(2,0) | |
| print("Elements is linked list : ",linked_list.traverse()) | |
| print("Index of node with value 2 : " , linked_list.search(2)) | |
| print("Total number of nodes : ",linked_list.count(linked_list.getRoot())) | |
| linked_list.reverse() | |
| print("Reversed linked list : ",linked_list.traverse()) | 
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment