所以我在这里碰到了一堵墙。我有一个main.c程序,它使用链接列表,并在某些点传递要从列表中删除的节点的值。踢球者应该通过引用来调用它。我相当肯定(比如...... 85%)我已经获得了移除节点功能所需的所有东西,但我可能只是没有正确实现它。
所以这是我的List.c文件中的所有其他函数派生自的初始化函数:
// Call by reference
// This is a linked list without dummy head node!
void init(List *alist, int (*fComp)(void *, void *), void (*fPrint)(void *), void (*fFree)(void *))
{
if(alist != NULL)
{
alist->head = NULL;
alist->tail = NULL;
alist->size = 0;
alist->cmpData = fComp;
alist->printData = fPrint;
alist->freeData = fFree;
}
else
{
printf("Invalid NULL list pointer passed in!\n");
}
}
这是我的removeNode函数:
int removeNode(List *alist, void *obj){
Node *cur, *prev = alist->head, *start = (*alist).head;
void *temp = obj;
if(temp == cur) {
alist->head = cur->next;
free(cur);
return 1;
}
else if(obj != alist->head) {
for (cur = start->next; cur != NULL; cur = cur->next) {
if (alist->cmpData(cur->data, temp) == 0) {
prev->next = cur->next;
free(cur);
return 1;
} // end if
prev = cur;
} // end for
} // end else if
return 0;
} // end removeNode
"列出* alist"和" void * obj"是链接列表元素和要删除的元素,分别是从main.c传入的元素。该函数应该使用来自init函数的cmpData(需要传递两个void指针)来比较正在查看的当前元素与要删除的元素,然后如果删除它则返回1或者如果它没有&#则返回0 39;吨
感谢您提前获取任何帮助!
更新 所以我的代码发布现在是我必须工作的代码。它按预期删除节点。但是,我有足够的free()吗?我有一个内存泄漏检查程序,它一直告诉我在这里需要两个free(),而且它似乎特别是removeNode函数,因为我的程序中没有其他地方被标记。