我正在将哈希表编写为链表数组。目前我正在尝试创建一个简单的哈希表,其中键是数组的索引,值是用于实现链接的单链表。
这是我删除节点的代码:
基本结构:
struct Node
{
int value;
int page;
struct Node *next;
};
int searchAndDelete(int frame,int page,int delete)
{
struct Node** iter;
iter=&hashtable[(page-1)%7];
struct Node** prev=iter;
for(;*iter;iter=&(*iter)->next)
{
if(page==((*iter)->page))
{
if(frame==((*iter)->value))
{
if(delete)
{
(*prev)->next=(*iter)->next;
free(*iter);
}
return 1;
}
}
prev=iter;
}
return 0;
}
插入请看这里,AddNode
当我删除一个节点时,它的值变为 0。当我搜索节点时,它返回的节点不是预设的,也就是 0 作为函数的输出。
我的代码中是否有任何我没有想到的错误?我是否留下任何内存泄漏或任何其他问题?
编辑 将这段代码添加到删除函数中:
int searchAndDelete(int frame,int page,int delete)
{
struct Node** iter;
iter=&hashtable[(page-1)%7];
struct Node** prev=iter;
struct Node** curr=iter;
for(;*curr;curr=&(*curr)->next)
{
if(page==((*curr)->page))
{
if(frame==((*curr)->value))
{
if(delete)
{
if(curr==iter)
{
iter=(*curr)->next;
free(*curr);
}
else
{
(*prev)->next=(*curr)->next;
free(*curr);
}
}
return 1;
}
}
prev=curr;
}
return 0;
}
我看到的问题是,当我第一次删除时,元素没有被释放,它的值设置为 0,但它仍然在链表中显示。在第二次删除中,最后一个元素的值变成了一些垃圾,因此在我的比较检查中永远不会删除该元素。有人可以阐明我可能在这里做什么吗?