J'apprends le python et la structure de données. Je mettais en œuvre des méthodes de liste à lien unique qui incluaient l'insertion en tête et à un poste donné. Je fini par écrire ce code:Insérer un nœud à une position donnée
class Node :
def __init__(self,data=None,next_node=None) :
self.data = data
self.next = next_node
class LinkedList :
def __init__(self) :
self.head = None
def insertathead(self,new_data) :
new_node = Node(new_data)
new_node.next = self.head
self.head = new_node
def InsertNpos(self,new_data,pos):
start = self.head
if pos == 0:
return Node(new_data, self.head)
while pos > 1:
self.head = self.head.next
pos -= 1
self.head.next = Node(new_data, self.head.next)
return start
def PrintLinkList(self) :
temp = self.head
while (temp) :
print (temp.data)
temp = temp.next
if __name__ == '__main__' :
llist = LinkedList()
llist.insertathead(8)
llist.insertathead(3)
llist.insertathead(10)
llist.insertathead(12)
llist.insertathead(15)
llist.insertathead(2)
llist.InsertNpos(1,2)
llist.PrintLinkList()
Sortie:
15
1
12
10
3
8
Maintenant, juste insérer à la tête fonctionne très bien, mais InsertNpos (1,2) donne une sortie erronée. La sortie est censée être 2,15,1,12,10,3,8. S'il vous plaît dites-moi où mon code est faux.
Quelle est la mauvaise sortie? Je vois un nœud valant 1 à la position 2 ... ou votre numérotation commence-t-elle à 0? Nous devons avoir une description claire de ce que vous attendiez et pourquoi. – Prune
Lorsque vous dites 'donne une mauvaise sortie', veuillez spécifier ce que la sortie est supposée être. –
Vous utilisez 'self.head' dans' InsertNpos() 'pour parcourir la liste chaînée, ce qui signifie que vous perdez le vrai' head'. Je pense que 'self.head = start' peut être le correctif simple, mais vous voulez probablement juste utiliser' start' pour itérer dans la liste. Même dans le cas de base, l'insertion à '0' ne met pas à jour' self.head' – AChampion