1
+ class Node :
2
+ def __init__ (self , data = None , next = None ):
3
+ self .data = data
4
+ self .next = next
5
+
6
+ class LinkedList :
7
+ def __init__ (self ):
8
+ self .head = None
9
+
10
+ def print (self ):
11
+ if self .head is None :
12
+ print ("Linked list is empty" )
13
+ return
14
+ itr = self .head
15
+ llstr = ''
16
+ while itr :
17
+ llstr += str (itr .data )+ ' --> ' if itr .next else str (itr .data )
18
+ itr = itr .next
19
+ print (llstr )
20
+
21
+ def length (self ):
22
+ count = 0
23
+ itr = self .head
24
+ while itr :
25
+ count += 1
26
+ itr = itr .next
27
+
28
+ return count
29
+
30
+ def insert_at_begining (self , data ):
31
+ node = Node (data , self .head )
32
+ self .head = node
33
+
34
+ def insert_at_end (self , data ):
35
+ if self .head is None :
36
+ self .head = Node (data , None )
37
+ return
38
+
39
+ itr = self .head
40
+
41
+ while itr .next :
42
+ itr = itr .next
43
+
44
+ itr .next = Node (data , None )
45
+
46
+ def insert_at (self , index , data ):
47
+ if index < 0 or index > self .length ():
48
+ raise Exception ("Invalid Index" )
49
+
50
+ if index == 0 :
51
+ self .insert_at_begining (data )
52
+ return
53
+
54
+ count = 0
55
+ itr = self .head
56
+ while itr :
57
+ if count == index - 1 :
58
+ node = Node (data , itr .next )
59
+ itr .next = node
60
+ break
61
+
62
+ itr = itr .next
63
+ count += 1
64
+
65
+ def remove_at (self , index ):
66
+ if index < 0 or index >= self .length ():
67
+ raise Exception ("Invalid Index" )
68
+
69
+ if index == 0 :
70
+ self .head = self .head .next
71
+ return
72
+
73
+ count = 0
74
+ itr = self .head
75
+ while itr :
76
+ if count == index - 1 :
77
+ itr .next = itr .next .next
78
+ break
79
+
80
+ itr = itr .next
81
+ count += 1
82
+
83
+ def insert_values (self , data_list ):
84
+ self .head = None
85
+ for data in data_list :
86
+ self .insert_at_end (data )
87
+
88
+
89
+ if __name__ == '__main__' :
90
+ node1 = LinkedList ()
91
+ node1 .insert_values (["python" ,"C++" ,"C" ,"Java" ])
92
+ node1 .insert_at (1 ,"Javascript" )
93
+ node1 .remove_at (2 )
94
+ node1 .print ()
95
+ node1 .insert_values ([45 ,7 ,12 ,567 ,99 ])
96
+ node1 .insert_at_end (67 )
97
+ node1 .print ()
0 commit comments