98 lines
2.3 KiB
Plaintext
98 lines
2.3 KiB
Plaintext
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
|