我一直在試圖寫一個最短路徑算法,dijkstras算法,找到前兩個頂點的最短路徑工作得很好。我試圖清除鏈表和優先級隊列時遇到問題。我將如何清除鏈接列表?
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,我也試圖通過列表遍歷和使用各元素刪除。我需要運用這些方法中的任何一種。 Root始終設置爲無效位置,並且出現訪問衝突錯誤。
有沒有簡單的東西,我只是沒有看到?我將如何去刪除鏈接列表中的每個元素?
既然你正在處理指針,你可以讓'root.next'和'end.next'都指向'root'。 – 2012-04-06 21:22:32