File tree Expand file tree Collapse file tree 2 files changed +138
-1
lines changed Expand file tree Collapse file tree 2 files changed +138
-1
lines changed Original file line number Diff line number Diff line change
1
+ class Node :
2
+ def __init__ (self , value ):
3
+ self .value = value
4
+ self .next = None
5
+ self .prev = None
6
+
7
+
8
+ class DoublyLinkedList :
9
+ def __init__ (self , value ):
10
+ new_node = Node (value )
11
+ self .head = new_node
12
+ self .tail = new_node
13
+ self .length = 1
14
+
15
+ def print_list (self ):
16
+ temp = self .head
17
+ while temp is not None :
18
+ print (temp .value )
19
+ temp = temp .next
20
+
21
+ def append (self , value ):
22
+ new_node = Node (value )
23
+ if self .head is None :
24
+ self .head = new_node
25
+ self .tail = new_node
26
+ else :
27
+ self .tail .next = new_node
28
+ new_node .prev = self .tail
29
+ self .tail = new_node
30
+ self .length += 1
31
+ return True
32
+
33
+ def pop (self ):
34
+ if self .length == 0 :
35
+ return None
36
+ temp = self .tail
37
+ if self .length == 1 :
38
+ self .head = None
39
+ self .tail = None
40
+ else :
41
+ self .tail = temp .prev
42
+ self .tail .next = None
43
+ temp .prev = None
44
+ self .length -= 1
45
+ return temp
46
+
47
+ def prepend (self , value ):
48
+ new_node = Node (value )
49
+ if self .length == 0 :
50
+ self .head = new_node
51
+ self .tail = new_node
52
+ else :
53
+ new_node .next = self .head
54
+ self .head .prev = new_node
55
+ self .head = new_node
56
+ self .length += 1
57
+ return True
58
+
59
+ def pop_first (self ):
60
+ if self .length == 0 :
61
+ return None
62
+ temp = self .head
63
+ if self .length == 1 :
64
+ self .head = None
65
+ self .tail = None
66
+ else :
67
+ self .head = temp .next
68
+ self .head .prev = None
69
+ temp .next = None
70
+ self .length -= 1
71
+ return temp
72
+
73
+ def get (self , index ):
74
+ if index < 0 or index >= self .length :
75
+ return None
76
+ if index < self .length / 2 :
77
+ temp = self .head
78
+ for _ in range (index ):
79
+ temp = temp .next
80
+ else :
81
+ temp = self .tail
82
+ for _ in range ((self .length - 1 ) - index ):
83
+ temp = temp .prev
84
+ return temp
85
+
86
+ def set_value (self , index , value ):
87
+ temp = self .get (index )
88
+ if temp :
89
+ temp .value = value
90
+ return True
91
+ return False
92
+
93
+ def insert (self , index , value ):
94
+ if index == 0 :
95
+ return self .prepend (value )
96
+ elif index == self .length :
97
+ return self .append (value )
98
+ left = self .get (index - 1 )
99
+ if left :
100
+ right = left .next
101
+ new_node = Node (value )
102
+ left .next = new_node
103
+ new_node .prev = left
104
+ new_node .next = right
105
+ right .prev = new_node
106
+ self .length += 1
107
+ return True
108
+ return False
109
+
110
+ def remove (self , index ):
111
+ if index == 0 :
112
+ return self .pop_first ()
113
+ elif index == self .length - 1 :
114
+ return self .pop ()
115
+ temp = self .get (index )
116
+ if temp :
117
+ left = temp .prev
118
+ right = temp .next
119
+ left .next = right
120
+ temp .prev = None
121
+ temp .next = None
122
+ right .prev = left
123
+ self .length -= 1
124
+ return temp
125
+ return None
126
+
127
+
128
+ dll = DoublyLinkedList (0 )
129
+ dll .append (1 )
130
+ dll .append (2 )
131
+ dll .append (3 )
132
+ dll .append (4 )
133
+ dll .append (5 )
134
+ dll .append (6 )
135
+ dll .append (7 )
136
+ dll .append (8 )
137
+ dll .append (9 )
138
+ dll .print_list ()
Original file line number Diff line number Diff line change @@ -126,7 +126,6 @@ def reverse(self):
126
126
temp = self .head
127
127
self .head = self .tail
128
128
self .tail = temp
129
- right = temp .next
130
129
left = None
131
130
for _ in range (self .length ):
132
131
right = temp .next
You can’t perform that action at this time.
0 commit comments