class Node: def __init__(self, data=None): self.data = data self.next = None class LinkedList: def __init__(self): self.head = None def append(self, data): new = Node(data) if self.head is None: self.head = new return last = self.head while (last.next): last = last.next last.next = new def print(self): val = self.head while val is not None: if val.next is None: print(val.data) else: print(val.data, end=" -> ") val = val.next def length(self): temp = self.head count = 0 while (temp != None): count += 1 temp = temp.next return count def insert(self, data, index): new = Node(data) if (index == 0): new.next = self.head self.head = new else: temp = self.head for i in range(1, index): if (temp != None): temp = temp.next if (temp != None): new.next = temp.next temp.next = new else: print("\nThe previous node is null.") def index(self, data): temp = self.head index = 0 while (temp != None): if (temp.data == data): return index temp = temp.next index += 1 return -1 def delete(self, index): if (index == 0): self.head = self.head.next elif (index >= self.length()): return else: temp = self.head for i in range(1, index): if (temp != None): temp = temp.next if (temp != None): temp.next = temp.next.next else: print("\nThe previous node is null.") if __name__ == "__main__": L = LinkedList() L.append(2) L.append(3) L.append(1) L.append(4) L.print() # 1 -> 3 L.insert(4, 3) L.insert(1, 0) L.insert(3, 2) L.insert(2, 1) L.print() # 15 -> 1 -> 10 -> 3 print(L.index(1)) # 1 L.delete(0) L.delete(1) L.delete(4) L.delete(5) L.print() # 1 -> 10 -> 3