so habe ich natürlich durch viele verknüpfte Liste Hilfe und alles, aber ich kann nicht scheinen, herauszufinden, was mit mir schief geht. Ich denke, ich verstehe die Logik anderer Codes, aber etwas ist mit mir und ich kann es nicht richtig funktionieren.verknüpfte Liste, wo ist meine Logik fehlerhaft?
-Code der Funktion:
void SparseM_list::newTerm(valueType newValue, int row, int column)
MatrixTerm *n = new MatrixTerm;
n->next = NULL;
n->column = column;
n->row = row;
n->value = newValue;
if (head != NULL)
{
cur = head;
while (cur->next != NULL)
{
cur = cur->next;
cout << "does it ever get inside the while loop? cur and curnext -> " << cur << " " << cur->next << endl; <-- never outputs
}
cur->next = n;
}
else //if head is null, n will be the starting point
{
head = n;
}
delete n;
}
und unterhalb der private Struktur ist/Variablen meiner Sparse Matrix ist meine Logik verknüpft Liste mit
struct MatrixTerm {
valueType value; //store value of matrix element
int column; //store column position
int row; //store row position
MatrixTerm *next; //point to next node in the linked list
};
MatrixTerm *head; //head point for the linked list
MatrixTerm *cur, *prev;
Also im Grunde diese
- Neue Terminformationen werden dem Matrix Term n dynamisch zugewiesen.
- Wenn der Kopf leer ist (die durch das Standard-Konstruktor gesetzt ist), dann Kopf = n
- zweiter Satz von Daten geht in. Kopf! = Null, so dass ich gesetzt Köter Zeiger gleich den Kopf
- die while-Schleife wird für die zweiten Daten übersprungen, weil head-> next null sein sollte und so cur-> next sollte null sein. Ich setze die cur-> nächste gleich n
- 3. Daten geht in. Cur-> nächste hat n von der vorherigen, so dass es in die While-Schleife eintritt. Der aktuelle Wert wird als nächster eingestellt. Es prüft die while-Schleife, und dieses Mal sollte cur-> next null sein, also geht es zur Einstellung cur-> next = n (3. Datensatz).
Es tritt jedoch nie die While-Schleife ein. Wo mache ich was kaputt? Die While-Schleife wird verwendet, um die verknüpfte Liste zu durchlaufen.
Sie ordnen den Zeiger tatsächlich zu und löschen ihn dann jedes Mal, wenn cur-> next auf NULL zeigt – Kochoba