1
1
class Node :
2
- """Representação de um nó em Python3. Com ele é possível criar uma lista duplamente encadeada """
2
+ """Class to represent a node in Python3 """
3
3
4
4
def __init__ (self , data ):
5
- self .data = data # Valor do nó
6
- self .next = None # Próximo nó
7
- self .prev = None # Nó anterior
5
+ self .data = data # Node value
6
+ self .next = None # Next node
7
+ self .prev = None # Previus node
8
8
9
9
10
10
class DoublyLinkedList :
11
- """Representação de uma lista dinâmica duplamente encadeada em Python3, onde cada elemento, é uma instância da classe nó """
11
+ """Class to represent a doubly linked list in Python3"""
12
12
13
13
def __init__ (self ):
14
- self .first = None # Primeiro elemento da lista
15
- self .last = None # Ultimo elemento da lista
16
- self ._size = 0 # Define o nº de elementos na lista
14
+ self ._first = None # First element of list
15
+ self ._last = None # Last element of list
16
+ self ._size = 0 # The size of list
17
17
18
18
def getItemByIndex (self , index ):
19
- """Método auxiliar que encontra o nó a partir do índice """
19
+ """Auxiliary method that returns the node by the index """
20
20
if index < 0 :
21
21
index = self ._size + index
22
- pointer = self .first
22
+ pointer = self ._first
23
23
for _ in range (index ):
24
24
if pointer .next :
25
25
pointer = pointer .next
26
26
else :
27
- raise IndexError ("Índice fora do intervalo " )
27
+ raise IndexError ("Index out of range " )
28
28
return pointer
29
29
30
30
def processIndex (self , index ):
31
- """Método auxiliar que garante o funcionamento dos métodos com índice negativo """
31
+ """Auxiliary method that helps with negative indexs """
32
32
if index is None :
33
33
index = self ._size - 1
34
34
elif index == self ._size or abs (index ) > self ._size :
35
- raise IndexError ("Índice inválido " )
35
+ raise IndexError ("Index out of range " )
36
36
if index < 0 :
37
37
index = self ._size + index
38
38
return index
39
39
40
40
def append (self , elem ):
41
- """Adiciona um novo nó ao final da lista """
41
+ """Append a new element in the end of list """
42
42
node = Node (elem )
43
- if self .first : # Se não for None
44
- self .last .next = node
45
- node .prev = self .last
43
+ if self ._first : # if is not None
44
+ self ._last .next = node
45
+ node .prev = self ._last
46
46
node .next = None
47
- self .last = node
47
+ self ._last = node
48
48
else :
49
- self .first = self .last = node
49
+ self ._first = self ._last = node
50
50
self ._size += 1
51
51
52
52
def remove (self , elem ):
53
- """Deleta a primeira aparição de um elemento na lista """
53
+ """Removes the first occurrence of the element from the list """
54
54
if self ._size == 0 :
55
- raise Exception ("Lista Vazia " )
55
+ raise Exception ("Empty list " )
56
56
index = self .index (elem )
57
57
del self [index ]
58
58
59
59
def empty (self ):
60
- """Verifica se a lista está vazia """
60
+ """Returns true if the stack is empty, otherwise, it returns false """
61
61
if self ._size == 0 :
62
62
return True
63
63
return False
64
64
65
65
def insert (self , index , elem ):
66
- """Insere um novo nó a partir de um índice """
66
+ """Inserts a new element by index """
67
67
node = Node (elem )
68
68
if index < 0 and abs (index ) > self ._size :
69
69
index = 0
@@ -72,9 +72,9 @@ def insert(self, index, elem):
72
72
if self ._size == 0 or index >= self ._size :
73
73
self .append (elem )
74
74
elif index == 0 :
75
- node .next = self .first
76
- self .first .prev = node
77
- self .first = node
75
+ node .next = self ._first
76
+ self ._first .prev = node
77
+ self ._first = node
78
78
self ._size += 1
79
79
elif index > 0 :
80
80
node_next = self .getItemByIndex (index )
@@ -85,30 +85,30 @@ def insert(self, index, elem):
85
85
node_prev .next = node
86
86
self ._size += 1
87
87
else :
88
- raise IndexError ("Indíce inválido " )
88
+ raise IndexError ("Index out of range " )
89
89
90
90
def pop (self , index = None ):
91
- """Deleta o último item da lista e retorna o seu valor """
91
+ """Removes and returns the last element from the list """
92
92
if self ._size == 0 :
93
- raise Exception ("Lista vazia " )
93
+ raise Exception ("Empty list " )
94
94
index = self .processIndex (index )
95
95
if self ._size == 1 :
96
- elem = self .last .data
96
+ elem = self ._last .data
97
97
self .clear ()
98
98
else :
99
99
elem = self .getItemByIndex (index ).data
100
100
del self [index ]
101
101
return elem
102
102
103
103
def clear (self ):
104
- """Restaura a lista para seu ponto inicial(Vazia )"""
105
- self .first = None
106
- self .last = None
104
+ """Restores the list to its starting point (Empty )"""
105
+ self ._first = None
106
+ self ._last = None
107
107
self ._size = 0
108
108
109
109
def count (self , elem ):
110
- """Conta o número de aparições de um determinado elemento na lista """
111
- pointer = self .first
110
+ """Returns the number of elements with the specified value """
111
+ pointer = self ._first
112
112
cont = 0
113
113
while (pointer != None ):
114
114
if pointer .data == elem :
@@ -117,69 +117,69 @@ def count(self, elem):
117
117
return cont
118
118
119
119
def index (self , elem ):
120
- """Retorna o índice da primeira aparição de um elemento na lista """
121
- pointer = self .first
120
+ """Returns the index of specified element """
121
+ pointer = self ._first
122
122
cont = 0
123
123
while (pointer ):
124
124
if pointer .data == elem :
125
125
return cont
126
126
else :
127
127
pointer = pointer .next
128
128
cont += 1
129
- raise ValueError (f"{ elem } não está na lista " )
129
+ raise ValueError (f"{ elem } not in list " )
130
130
131
131
def reverse (self ):
132
- """Inverte lista original"""
132
+ """Reverses the original list """
133
133
if self ._size == 0 :
134
- raise IndexError ("Lista vazia " )
135
- pointer = self .first
134
+ raise IndexError ("Empty list " )
135
+ pointer = self ._first
136
136
while (pointer ):
137
137
pointer .next , pointer .prev = pointer .prev , pointer .next
138
138
pointer = pointer .prev
139
- self .first , self .last = self .last , self .first
139
+ self ._first , self ._last = self ._last , self ._first
140
140
141
- def createReverse (self ):
142
- """Cria lista invertida em novo objeto """
141
+ def createReversed (self ):
142
+ """Creates and returns a reversed new list """
143
143
if self ._size == 0 :
144
- raise IndexError ("Lista vazia " )
144
+ raise IndexError ("Empty list " )
145
145
new = DoublyLinkedList ()
146
- pointer = self .last
146
+ pointer = self ._last
147
147
while (pointer ):
148
148
new .append (pointer .data )
149
149
pointer = pointer .prev
150
150
return new
151
151
152
152
def __len__ (self ):
153
- """Retorna o tamanho da lista """
153
+ """Returns the size of list; Ex: len(obj) """
154
154
return self ._size
155
155
156
156
def __getitem__ (self , index ):
157
- """Retorna o valor de um nó da lista a partir de um índice """
157
+ """Returns an element that corresponding to the index; Ex: obj[index] """
158
158
if self ._size == 0 :
159
- raise IndexError ("Lista vazia " )
159
+ raise IndexError ("Empty list " )
160
160
index = self .processIndex (index )
161
161
pointer = self .getItemByIndex (index )
162
162
return pointer .data
163
163
164
164
def __setitem__ (self , index , elem ):
165
- """Atribui um novo valor a um nó a partir de um índice """
165
+ """Sets the value by the index; Ex: obj[index] = value """
166
166
if self ._size == 0 :
167
- raise IndexError ("Lista vazia " )
167
+ raise IndexError ("Empty list " )
168
168
index = self .processIndex (index )
169
169
pointer = self .getItemByIndex (index )
170
170
pointer .data = elem
171
171
172
172
def __delitem__ (self , index ):
173
- """Remove um nó da lista a partir de um índice """
173
+ """Removes an element that corresponding to the index; Ex: obj[index] """
174
174
if self ._size == 0 :
175
- raise IndexError ("Lista vazia " )
175
+ raise IndexError ("Empty list " )
176
176
index = self .processIndex (index )
177
177
if index == 0 :
178
- self .first = self .first .next
179
- self .first .prev = None
178
+ self ._first = self ._first .next
179
+ self ._first .prev = None
180
180
elif index == self ._size - 1 :
181
- self .last = self .last .prev
182
- self .last .next = None
181
+ self ._last = self ._last .prev
182
+ self ._last .next = None
183
183
else :
184
184
node_next = self .getItemByIndex (index + 1 )
185
185
node_prev = self .getItemByIndex (index - 1 )
@@ -188,22 +188,24 @@ def __delitem__(self, index):
188
188
self ._size -= 1
189
189
190
190
def __del__ (self ):
191
- """Método destrutor invocado sempre que o código é finalizado """
191
+ """Destructor method """
192
192
193
193
def __str__ (self ):
194
- """Método para representação da lista encadeada"""
194
+ """Method to represent a doubly linked list (user)"""
195
+ if self ._size == 0 :
196
+ return "\033 [1;34mNone\033 [0;0m" + " <-> " + "\033 [1;34mNone\033 [0;0m"
195
197
rep = "\033 [1;34mNone\033 [0;0m" + " <- {} " + "\033 [1;34mNone\033 [0;0m"
196
- pointer = self .first
198
+ pointer = self ._first
197
199
aux = ""
198
200
while (pointer != None ):
199
- if pointer == self .first and pointer .next is None :
201
+ if pointer == self ._first and pointer .next is None :
200
202
aux += "\033 [1;31m" + str (pointer .data ) + "\033 [0;0m" + " -> "
201
203
break
202
204
elif pointer .next is None :
203
205
aux += f"{ pointer .data } -> "
204
206
break
205
207
else :
206
- if self .first == pointer :
208
+ if self ._first == pointer :
207
209
aux += "\033 [1;31m" + \
208
210
str (pointer .data ) + "\033 [0;0m" + " <-> "
209
211
else :
@@ -213,4 +215,5 @@ def __str__(self):
213
215
return rep
214
216
215
217
def __repr__ (self ):
218
+ """Method to represent a doubly linked list (developer)"""
216
219
return str (self )
0 commit comments