// J'ai écrit du code java pour la méthode d'insertion sur une liste doublement chaînée mais il y a une boucle // infinie quand je l'exécute. J'essaie de trouver un bug, mais je n'ai pas trouvé jusqu'à présent. Aucune suggestion? // il appelle une fonction d'assistanceinsertion trier sur liste chaînée
public IntList insertionSort () {
DListNode soFar = null;
for (DListNode p=myHead; p!=null; p=p.myNext) {
soFar = insert (p, soFar);
}
return new IntList (soFar);
}
// values will be in decreasing order.
private DListNode insert (DListNode p, DListNode head) {
DListNode q=new DListNode(p.myItem);
if(head==null){
head=q;
return head;
}
if(q.myItem>=head.myItem){
DListNode te=head;
q.myNext=te;
te.myPrev=q;
q=head;
return head;
}
DListNode a;
boolean found=false;
for(a=head; a!=null;){
if(a.myItem<q.myItem){
found=true;
break;
}
else{
a=a.myNext;
}
}
if(found==false){
DListNode temp=myTail;
temp.myNext=q;
q.myPrev=temp;
myTail=q;
return head;
}
if(found==true){
DListNode t;
t=a.myPrev;
a.myPrev=q;
t.myNext=q;
q.myPrev=t;
q.myNext=a;
}
return head;
}
Merci. J'ai corrigé les bugs et maintenant ça marche. Pouvez-vous expliquer pourquoi myTail ne fonctionnait pas comme prévu? Je ne suis toujours pas sûr de ça. J'ai supprimé myTail et changé comme vous l'avez suggéré. –
Je suppose que myTail indiquait initialement le dernier nœud de la liste non triée. 'temp' est créé comme pointant vers' myTail', et cela est utilisé comme base pour insérer 'q'. Ce qui se passe réellement là-bas, c'est que vous attachez 'q' à la fin de la liste non triée (entrée), d'où la raison pour laquelle cette liste pourrait continuer à croître et à réévaluer les nœuds. Je suggérerais d'esquisser une liste avec quelques pointeurs vers des nœuds pour la traverser visuellement.Si cette réponse répond à votre question, veuillez l'accepter comme réponse afin que la question soit marquée comme réponse. –