我正在寻找一种清除链表的解决方案,这就是我所得到的。
我不确定如何完成此操作:
void clearRecursively(LIST **presentNode, LIST **endNode){
if (*presentNode == NULL)
return;
LIST *nextNode;
clearRecursively(&nextNode, endNode);
*presentNode = NULL;
*endNode = NULL;
}
答案 0 :(得分:0)
您正在传递一个指向什么都没有的指针:clearRecursively(&nextNode, endNode);
除了将指针分配给NULL
之外,不会删除它们所指向的内存-free(POINTER_NAME)
就是为此。
很明显,我认为您的意思是删除-由于尚未提供完整的代码,因此,这是一种方法(例如,出于此目的),它假定它是一个单链表:
//THIS TRAVERSES DOWN THE LINKED-LIST AND THEN DELETES THAT LAST NODE
//RECURSIVELY IT DELETES THE ENTIRE LIST
void clear_recursively(LIST **head)
{
if(*head!=NULL)
{
clear_recursively(&((*head)->next));
free(*head);
*head=NULL;
}
}
您只需要传递head
指针(指向第一个节点的指针)的地址即可。
如果明确地说,您只是要将整个链接列表的数据字段设置为值,则:
void clear_recursively(LIST *head)
{
if(head!=NULL)
{
clear_recursively(head->next);
head->data = //SOME VALUE;
}
}