Skip to content

Instantly share code, notes, and snippets.

@jatinsharrma
Last active November 25, 2022 18:01
Show Gist options
  • Save jatinsharrma/75d913140dbfb95895fa07b093e53f8d to your computer and use it in GitHub Desktop.
Save jatinsharrma/75d913140dbfb95895fa07b093e53f8d to your computer and use it in GitHub Desktop.
Linked List : simple Linked List
#-------------------------------------------
#------------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