@@ -22,7 +22,13 @@ def insert_at_end(self,new_data):
22
22
self .head = newNode
23
23
newNode .next = self .head
24
24
return
25
-
25
+ firstNOde = self .head
26
+ newNode = Node (new_data )
27
+ newNode .next = firstNOde
28
+ while firstNOde and firstNOde .next != self .head :
29
+ firstNOde = firstNOde .next
30
+ firstNOde .next = newNode
31
+ #newNode.next=self.head
26
32
27
33
#creating prepending function or inserting at beginning function
28
34
def prepending_a_node (self ,new_data ):
@@ -33,8 +39,11 @@ def prepending_a_node(self,new_data):
33
39
return
34
40
firstNOde = self .head
35
41
newNode = Node (new_data )
42
+ newNode .next = firstNOde
43
+ while firstNOde and firstNOde .next != self .head :
44
+ firstNOde = firstNOde .next
45
+ firstNOde .next = newNode
36
46
self .head = newNode
37
- newNode .next = firstNOde
38
47
#creating a function for inserting at middle
39
48
def insert_at_middle (self ,index ,new_data ):
40
49
if index < 0 or index >= self .get_length_of_cll ():
@@ -65,11 +74,13 @@ def removing_an_element_at_beg(self):
65
74
if self .head and self .get_length_of_cll () == 1 :
66
75
self .head = None
67
76
return
68
- firstNOde = self .head
69
- self .head = firstNOde .next
70
- firstNOde .next = firstNOde .next .next
77
+ firstNOde = self .head
78
+ while firstNOde and firstNOde .next != self .head :
79
+ firstNOde = firstNOde .next
80
+ firstNOde .next = None
81
+ self .head = self .head .next
71
82
firstNOde = None
72
- '''
83
+
73
84
#removing an element at end
74
85
def removing_an_element_at_end (self ):
75
86
n = self .name
@@ -89,8 +100,23 @@ def removing_an_element_at_end(self):
89
100
break
90
101
firstNOde = firstNOde .next
91
102
count += 1
92
- '''
103
+
93
104
105
+ #removing an element at middle
106
+ def removing_an_element_at_middle (self ,index ):
107
+ if index < 0 or index >= self .get_length_of_cll ():
108
+ raise Exception ("index error" )
109
+ return
110
+ if index == 0 :
111
+ self .removing_an_element_at_beg ()
112
+ return
113
+ firstNOde = self .head
114
+ count = 0
115
+ while firstNOde and firstNOde .next != self .head :
116
+ if count == index - 1 :
117
+ firstNOde .next = firstNOde .next .next
118
+ firstNOde = firstNOde .next
119
+ count += 1
94
120
95
121
96
122
@@ -118,24 +144,28 @@ def print_cll(self):
118
144
return
119
145
firstNOde = self .head
120
146
string = " "
121
- while firstNOde and firstNOde . next != self . head :
147
+ while firstNOde :
122
148
string = str (firstNOde .data )+ " --> "
123
149
firstNOde = firstNOde .next
124
150
print (string ,end = " " )
151
+ if firstNOde == self .head :
152
+ break
125
153
print ()
126
154
127
155
#creating objects in main function
128
156
def main ():
129
157
c1 = cll ("first Circular linked list" )
130
- # c1.insert_at_end(89)
131
- # c1.insert_at_end(90)
158
+ c1 .insert_at_end (89 )
159
+ c1 .insert_at_end (90 )
132
160
c1 .prepending_a_node (91 )
133
- #c1.prepending_a_node(1000)
134
- #c1.insert_at_end(1)
135
- #c1.insert_at_middle(2,45)
136
- #c1.print_cll()
137
- #c1.removing_an_element_at_beg()
138
- #c1.removing_an_element_at_end()
161
+ c1 .prepending_a_node (1000 )
162
+ c1 .insert_at_end (4646 )
163
+ c1 .insert_at_end (1 )
164
+ c1 .insert_at_middle (1 ,45 )
165
+ c1 .print_cll ()
166
+ c1 .removing_an_element_at_beg ()
167
+ c1 .removing_an_element_at_end ()
168
+ c1 .removing_an_element_at_middle (1 )
139
169
c1 .print_cll ()
140
170
141
171
if __name__ == "__main__" :
0 commit comments