私は最短経路アルゴリズムdijkstrasアルゴリズムを書こうとしていました。最初の2つの頂点の最短経路を見つけても問題ありません。私はリンクされたリストと優先順位キューをクリアしようとしているときに問題にぶつかります。私が試したこれらの明確な方法と共にリンクされたリストをクリアするにはどうすればよいですか?
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;
}
は単にNULLにルートを設定し、また、私は、リストを横断し、各要素に対してdeleteを使用してみました。私はこれらの方法のどれかで運が必要です。ルートは無効な場所に設定され続け、アクセス違反エラーが発生します。
私が見ていない単純なことがありますか?リンクされたリストからすべての要素を削除するにはどうすればいいですか? NULL
へroot
を設定するあなたは、各要素の上に移動して、削除する必要が
あなたはポインタを扱っているので、 'root.next'と' end.next'を両方とも 'root'を指すようにすることができます。 –