beiden Schleifen gedruckt werden, ein Element fehlt, Sie sollte iterieren, bis der aktuelle Knoten NULL
ist, nicht bis der nächste Knoten ist. Tatsächlich können Sie diese Bedingung einfach in eine while
-Schleife einfügen, anstatt eine for
-Schleife zu verwenden, die für eine verknüpfte Liste logischer sein könnte (selbst wenn Sie die Länge bereits vorausberechnet haben). Auch ich vermute, dass Sie die gleiche start
Variable verwenden, um das Ergebnis zu überprüfen, was nicht funktioniert, weil Sie es überschreiben. so etwas wie dieses versuchen:
NodeType * temp = start;
int dataHolder[length] = {0};
int runTime = length - 1;
while (temp != NULL) {
dataHolder[runTime] = temp->data;
temp = temp->next;
runTime--;
}
temp = start;
runtime = 0;
while (temp != NULL) {
temp->data = dataHolder[runtime];
temp = temp->next;
runtime++;
}
Nachtrag:
Sie können tatsächlich eine verknüpfte Liste in O Reverse (n) ohne zusätzlichen Speicher mit (und ohne dass seine Länge vorauszuberechnen), nur durch Neuordnen die Zeiger. In einigen Fällen ist dies möglicherweise nicht akzeptabel (z. B. wenn Sie externe Zeiger oder Verweise auf Knoten haben, die erwarten, dass ihr Wert geändert wird, wenn Sie die Liste umkehren), aber meistens ist es in Ordnung. Es würde so etwas gehen:
NodeType * temp1 = start; // Assuming start is not NULL
NodeType * temp2 = start->next;
start->next = NULL;
while (temp2 != NULL) {
NodeType * temp3 = temp2->next;
temp2->next = temp1;
temp1 = temp2;
temp2 = temp3;
}
Meinst du "ich möchte es auf' 6 5 7' "umkehren? –