1
+ # Class for creating Node
2
+ class Node :
3
+ def __init__ (self , data = None , next = None , prev = None ):
4
+ self .data = data
5
+ self .next = next
6
+ self .prev = prev
7
+
8
+ # Double linkedlist area
9
+
10
+
11
+ class DLinkedList :
12
+ # initializind head
13
+ def __init__ (self ):
14
+ self .head = None
15
+
16
+ # insertion at start
17
+ def addbeg (self , data ):
18
+ if self .head == None :
19
+ node = Node (data , self .head , None )
20
+ self .head = node
21
+ else :
22
+ node = Node (data , self .head , None )
23
+ self .head .prev = node
24
+ self .head = node
25
+
26
+ # printing the list
27
+ def prinnt (self ):
28
+ if self .head is None :
29
+ print ('empty' )
30
+ return
31
+ temp = self .head
32
+ st = ''
33
+ while temp :
34
+ st += '<-' + str (temp .data ) + '->'
35
+ temp = temp .next
36
+ print (st )
37
+
38
+ # insertion at end
39
+ def addend (self , data ):
40
+ if self .head is None :
41
+ self .head = Node (data , None , None )
42
+ else :
43
+ temp = self .head
44
+ while temp .next :
45
+ temp = temp .next
46
+ node = Node (data , None , temp )
47
+ temp .next = node
48
+
49
+ #printing in forward
50
+ def pforward (self ):
51
+ if self .head is None :
52
+ print ('empty' )
53
+ return
54
+ temp = self .head
55
+ st = ''
56
+ while temp :
57
+ st += str (temp .data ) + '->'
58
+ temp = temp .next
59
+ print (st )
60
+
61
+ # Finding the length of linkedlist
62
+ def lenn (self ):
63
+ if self .head is None :
64
+ print ('empty' )
65
+ return
66
+ count = 0
67
+ temp = self .head
68
+ while temp :
69
+ count += 1
70
+ temp = temp .next
71
+ return count
72
+
73
+ # finding last node
74
+ def lastnode (self ):
75
+ temp = self .head
76
+ while temp .next :
77
+ temp = temp .next
78
+ return temp
79
+
80
+ # Inserting element at linkedlist with index
81
+ def addmid (self , index , data ):
82
+ if index < 0 or index >= self .lenn ():
83
+ print ('Invalid index' )
84
+ return
85
+
86
+ if index == 0 :
87
+ self .addbeg (data )
88
+ return
89
+
90
+ if index == self .lenn () - 1 :
91
+ self .addend (data )
92
+ return
93
+
94
+ temp = self .head
95
+ count = 0
96
+ while temp :
97
+ if count == index - 1 :
98
+ node = Node (data , temp .next , temp )
99
+ temp .next .prev = node
100
+ temp .next = node
101
+ break
102
+ temp = temp .next
103
+ count += 1
104
+
105
+ #print in reverse
106
+ def pbackward (self ):
107
+ if self .head is None :
108
+ print ('empty' )
109
+ return
110
+ temp = self .lastnode ()
111
+ st = ''
112
+ while temp :
113
+ st += '<-' + str (temp .data )
114
+ temp = temp .prev
115
+ print (st )
116
+
117
+ # removing element at linkedlist with index
118
+ def remove (self , index ):
119
+
120
+ if index < 0 or index >= self .lenn ():
121
+ print ('Invalid index' )
122
+ return
123
+ if index == 0 :
124
+ self .head = self .head .next
125
+ self .head .prev .next = None
126
+ self .head .prev = None
127
+ return
128
+
129
+ if index == self .lenn () - 1 :
130
+ temp = self .head
131
+ while temp .next :
132
+ temp = temp .next
133
+ temp .prev .next = None
134
+ temp .prev = None
135
+ return
136
+
137
+ temp = self .head
138
+ count = 0
139
+ while temp :
140
+ if count == index :
141
+ temp .prev .next = temp .next
142
+ temp .next .prev = temp .prev
143
+ temp .prev = None
144
+ temp .next = None
145
+
146
+ temp = temp .next
147
+ count += 1
148
+
149
+
150
+ if __name__ == '__main__' :
151
+ li = DLinkedList ()
152
+ a = int (input ('Enter the value to insert at beg: ' ))
153
+ li .addbeg (a )
154
+ b = int (input ('Enter the value to insert at beg: ' ))
155
+ li .addbeg (b )
156
+ c = int (input ('Enter the value to insert at end: ' ))
157
+ li .addend (c )
158
+ d = int (input ('Enter the value to insert at end: ' ))
159
+ li .addend (d )
160
+ li .prinnt ()
161
+ print ("Priting in forward: " , end = "" )
162
+ li .pforward ()
163
+ print ('Printing in backward: ' , end = "" )
164
+ li .pbackward ()
165
+ print ('Len of linked list is ' , end = '' )
166
+ li .lenn ()
167
+ e = int (input ('Enter the index to be removed: ' ))
168
+ li .remove (e )
169
+ li .prinnt ()
170
+ f = int (input ('Enter the index: ' ))
171
+ g = int (input ('Enter the number: ' ))
172
+ li .addmid (f , g )
173
+ li .prinnt ()
0 commit comments