Je suis coincé en implémentant la fonction add d'une liste circulaire en python. J'ai un pointeur de tête qui devrait être une référence à un nœud, mais chaque fois que j'ajoute quelque chose à la liste, la tête est toujours None. Voici le code que j'ai jusqu'à présent:Liste chaînée en python
class CircleList():
__slots__ = ('head', 'size')
def __init__(self):
self.head = None
self.size = 0
def __str__(self):
result = "<"
node = self.head
count = self.size
while count != 0:
result = result + str(node.data)
if count != 1:
result = result + ", "
node = node.next
count -= 1
result = result + ">"
return result
def add(self, element):
head = self.head
print(head)
size = self.size
if head == None:
head = Node(element, None)
head.next = head
else:
cursor = head
while cursor.next != head:
cursor = cursor.next
temp = Node(element, head)
cursor.next = temp
size += 1
class Node():
__slots__ = ('data','next')
def __init__(self, data, next):
self.data = data
self.next = next
Voici le pilote:
stream = open('data.txt', 'r')
circlelist = CircleList()
for name in stream
circlelist.add(name)
print(circlelist)
Toute raison pour laquelle vous implémentez comme ça? Ce n'est pas vraiment pythonique, et vous pourriez facilement trouver une version beaucoup plus élégante qui étend 'list', fournissant des méta-méthodes comme' __getitem__' etc. et utilisant des index. Cela élimine également le besoin de la classe 'Node' superflue. Aussi, je suggère de coller à l'interface bien connue de la liste. –