Ich habe versucht, einen Algorithmus für den kürzesten Weg, Dijkstras-Algorithmus zu schreiben, die Suche nach dem kürzesten Pfad für die ersten beiden Ecken funktioniert gut. Ich stoße auf das Problem, während ich versuche, eine verknüpfte Liste und eine Prioritätswarteschlange zu löschen.Wie würde ich eine verknüpfte Liste löschen?
class llNode {
public:
int id;
int source;
int weight;
llNode* next;
llNode(int key, int distance, int from) {
id=key;
weight=distance;
source=from;
next = NULL;
}
};
class lList {
private:
llNode* root;
llNode* end;
void clearAll(llNode* toClear);
public:
lList() {
root = NULL;
}
void add(llNode* toAdd) {
if (root == NULL) {
root = toAdd;
end = toAdd;
return;
}
end->next = toAdd;
end=end->next;
}
bool isFound(int key) {
for(llNode* ii= root; ii != NULL ; ii=ii->next) {
if (ii->id == key) {
return true;
}
}
return false;
}
void clearAll();
};
void lList::clearAll() {
clearAll(root);
}
void lList::clearAll(llNode* toClear) {
if(toClear == NULL) {
return;
}
clearAll(toClear->next);
toClear=NULL;
}
Zusammen mit diesen klaren Methoden, die ich versuchte, einfach root auf NULL gesetzt und ich habe auch versucht, durch die Liste durchlaufen und für jedes Element die gelöscht wurde. Ich habe Glück mit einer dieser Methoden. Root wird weiterhin auf einen ungültigen Speicherort festgelegt und ich erhalte Zugriffsverletzungsfehler.
Gibt es etwas einfaches, das ich gerade nicht sehe? Wie würde ich jedes Element aus einer verknüpften Liste löschen?
Da Sie mit Zeigern zu tun haben, könnten Sie einfach die 'root.next' und' end.next' beide auf den 'root' zeigen. –