Ich versuche, einen Code zu schreiben, um eine verkettete Liste zu sortieren, die ganze Zahlen enthält, aber es funktioniert nicht, wie ich dachte, dass es basierend auf meiner Argumentation ich dafür mit Bleistift und Papier arbeitete. Anstatt die Liste zu durchlaufen, vergleicht sie das erste Wertepaar, löscht den zweiten Wert in der Liste und gibt den Rest der Liste zurück. Meine Methode Code ist:Einfügung sortierte verkettete Liste C++
//typedef Node * ListType;
void insertionSort(ListType &list) {
ListType p = list;
Node * curr;
if(p == NULL || p->next == NULL){
return;
}
while(p != NULL){
curr = p->next;
if(curr == NULL){
break;
}
if(p->data > curr->data){
p->next = curr->next;
curr->next = p;
}
p = p->next;
}
}
Nehmen wir zum Beispiel ich mit einer Liste beginnen: 5 2 3 4 Der Ausgang I in dieser Liste nach dem Aufruf dieser Methode erhalten ist: 5 3 4
I‘ m nicht mit Zeigern. Jede Hilfe wird geschätzt!
Hallo Sam, ich habe versucht, was du vorgeschlagen hast, aber es funktioniert immer noch nicht vollständig. Ich versuche, die gesamte Logik in einer Methodendefinition anzuwenden, da sie Teil einer größeren Klasse ist, die wiederholt andere Funktionen auf eine verknüpfte Liste anwendet. Es sortiert nur nach einem Element der Liste und kümmert sich dann nicht um den Rest der Elemente. Zum Beispiel begann ich mit einer Liste 6 2 5 2 3 4 und die Ausgabe gibt es mir jedes Mal, wenn ich die Methode aufrufen, ist es 2 5 2 3 4 6 – SamS
Bevor "6" an den Kopf der Liste hinzugefügt wird, Die Liste enthält "2 5 2 3 4". Dies ist natürlich keine gültig sortierte Liste. Es sollte "2 2 3 4 5" sein. Bei der Einfügesortierung wird jedes Mal, wenn ein neuer Knoten eingefügt wird, die Liste korrekt sortiert. Siehe die Beispielausgabe in meiner Antwort. –
Oh. Ich versuche es so zu machen, dass es eine Liste auf einmal sortieren kann, auch wenn es 2 4 2 5 3 6 2 oder so ähnlich ist. Aber bisher kein Glück – SamS