Skip to content

Commit 9636cc4

Browse files
updated doubly linked list
1 parent d420b93 commit 9636cc4

File tree

1 file changed

+65
-62
lines changed

1 file changed

+65
-62
lines changed

Doubly Linked List.py

Lines changed: 65 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,69 @@
11
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"""
33

44
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
88

99

1010
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"""
1212

1313
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
1717

1818
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"""
2020
if index < 0:
2121
index = self._size + index
22-
pointer = self.first
22+
pointer = self._first
2323
for _ in range(index):
2424
if pointer.next:
2525
pointer = pointer.next
2626
else:
27-
raise IndexError("Índice fora do intervalo")
27+
raise IndexError("Index out of range")
2828
return pointer
2929

3030
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"""
3232
if index is None:
3333
index = self._size - 1
3434
elif index == self._size or abs(index) > self._size:
35-
raise IndexError("Índice inválido")
35+
raise IndexError("Index out of range")
3636
if index < 0:
3737
index = self._size + index
3838
return index
3939

4040
def append(self, elem):
41-
"""Adiciona um novo nó ao final da lista"""
41+
"""Append a new element in the end of list"""
4242
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
4646
node.next = None
47-
self.last = node
47+
self._last = node
4848
else:
49-
self.first = self.last = node
49+
self._first = self._last = node
5050
self._size += 1
5151

5252
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"""
5454
if self._size == 0:
55-
raise Exception("Lista Vazia")
55+
raise Exception("Empty list")
5656
index = self.index(elem)
5757
del self[index]
5858

5959
def empty(self):
60-
"""Verifica se a lista está vazia"""
60+
"""Returns true if the stack is empty, otherwise, it returns false"""
6161
if self._size == 0:
6262
return True
6363
return False
6464

6565
def insert(self, index, elem):
66-
"""Insere um novo nó a partir de um índice"""
66+
"""Inserts a new element by index"""
6767
node = Node(elem)
6868
if index < 0 and abs(index) > self._size:
6969
index = 0
@@ -72,9 +72,9 @@ def insert(self, index, elem):
7272
if self._size == 0 or index >= self._size:
7373
self.append(elem)
7474
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
7878
self._size += 1
7979
elif index > 0:
8080
node_next = self.getItemByIndex(index)
@@ -85,30 +85,30 @@ def insert(self, index, elem):
8585
node_prev.next = node
8686
self._size += 1
8787
else:
88-
raise IndexError("Indíce inválido")
88+
raise IndexError("Index out of range")
8989

9090
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"""
9292
if self._size == 0:
93-
raise Exception("Lista vazia")
93+
raise Exception("Empty list")
9494
index = self.processIndex(index)
9595
if self._size == 1:
96-
elem = self.last.data
96+
elem = self._last.data
9797
self.clear()
9898
else:
9999
elem = self.getItemByIndex(index).data
100100
del self[index]
101101
return elem
102102

103103
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
107107
self._size = 0
108108

109109
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
112112
cont = 0
113113
while(pointer != None):
114114
if pointer.data == elem:
@@ -117,69 +117,69 @@ def count(self, elem):
117117
return cont
118118

119119
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
122122
cont = 0
123123
while(pointer):
124124
if pointer.data == elem:
125125
return cont
126126
else:
127127
pointer = pointer.next
128128
cont += 1
129-
raise ValueError(f"{elem} não está na lista")
129+
raise ValueError(f"{elem} not in list")
130130

131131
def reverse(self):
132-
"""Inverte lista original"""
132+
"""Reverses the original list"""
133133
if self._size == 0:
134-
raise IndexError("Lista vazia")
135-
pointer = self.first
134+
raise IndexError("Empty list")
135+
pointer = self._first
136136
while(pointer):
137137
pointer.next, pointer.prev = pointer.prev, pointer.next
138138
pointer = pointer.prev
139-
self.first, self.last = self.last, self.first
139+
self._first, self._last = self._last, self._first
140140

141-
def createReverse(self):
142-
"""Cria lista invertida em novo objeto"""
141+
def createReversed(self):
142+
"""Creates and returns a reversed new list"""
143143
if self._size == 0:
144-
raise IndexError("Lista vazia")
144+
raise IndexError("Empty list")
145145
new = DoublyLinkedList()
146-
pointer = self.last
146+
pointer = self._last
147147
while(pointer):
148148
new.append(pointer.data)
149149
pointer = pointer.prev
150150
return new
151151

152152
def __len__(self):
153-
"""Retorna o tamanho da lista"""
153+
"""Returns the size of list; Ex: len(obj)"""
154154
return self._size
155155

156156
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]"""
158158
if self._size == 0:
159-
raise IndexError("Lista vazia")
159+
raise IndexError("Empty list")
160160
index = self.processIndex(index)
161161
pointer = self.getItemByIndex(index)
162162
return pointer.data
163163

164164
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"""
166166
if self._size == 0:
167-
raise IndexError("Lista vazia")
167+
raise IndexError("Empty list")
168168
index = self.processIndex(index)
169169
pointer = self.getItemByIndex(index)
170170
pointer.data = elem
171171

172172
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]"""
174174
if self._size == 0:
175-
raise IndexError("Lista vazia")
175+
raise IndexError("Empty list")
176176
index = self.processIndex(index)
177177
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
180180
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
183183
else:
184184
node_next = self.getItemByIndex(index+1)
185185
node_prev = self.getItemByIndex(index-1)
@@ -188,22 +188,24 @@ def __delitem__(self, index):
188188
self._size -= 1
189189

190190
def __del__(self):
191-
"""Método destrutor invocado sempre que o código é finalizado"""
191+
"""Destructor method"""
192192

193193
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"
195197
rep = "\033[1;34mNone\033[0;0m" + " <- {} " + "\033[1;34mNone\033[0;0m"
196-
pointer = self.first
198+
pointer = self._first
197199
aux = ""
198200
while(pointer != None):
199-
if pointer == self.first and pointer.next is None:
201+
if pointer == self._first and pointer.next is None:
200202
aux += "\033[1;31m" + str(pointer.data) + "\033[0;0m" + " -> "
201203
break
202204
elif pointer.next is None:
203205
aux += f"{pointer.data} -> "
204206
break
205207
else:
206-
if self.first == pointer:
208+
if self._first == pointer:
207209
aux += "\033[1;31m" + \
208210
str(pointer.data) + "\033[0;0m" + " <-> "
209211
else:
@@ -213,4 +215,5 @@ def __str__(self):
213215
return rep
214216

215217
def __repr__(self):
218+
"""Method to represent a doubly linked list (developer)"""
216219
return str(self)

0 commit comments

Comments
 (0)