我一直在尝试编写一个最短路径算法,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;
}
除了这些明确的方法之外,我还尝试将root设置为NULL,并且我还尝试遍历列表并在每个元素上使用delete。我不得不运气这些方法。 Root一直设置为无效位置,并且我遇到访问冲突错误。
我有没有看到简单的东西?如何删除链表中的每个元素?
答案 0 :(得分:5)
您需要检查每个元素并将其删除 伪代码
Set pointer to root
While(pointer !=null)
{
temp=pointer->next;
delete[] pointer;
pointer = temp;
}
答案 1 :(得分:-2)
将root
设置为NULL
会删除整个列表。
void lList::clearAll() {
root = NULL;
}
你说你试过这个。在这种情况下,您的访问违规行为如何发生?
注意:我的代码可能包含内存泄漏!您可能希望遍历列表并释放每个项目,除非使用其他机制恢复其内存。