您好我正在尝试创建一个清除*first
将指向的链接列表的函数,然后应释放节点**first
并将指针*first
设置为{{ 1}}。
我无法抓住双指针而无法使其正常工作。
答案 0 :(得分:3)
您必须在删除节点之前移至下一个列表元素。否则,您正在访问已释放的内存。
while( *first != NULL )
{
temp = *first;
*first = temp->next;
free(temp);
}
请注意,因为您正在废弃整个列表,*first
最终将为NULL。因此,您可以使用单指针(就像temp
)遍历列表,然后在结尾处设置*first = NULL
。这节省了额外的指针间接,在这种情况下可能会浪费CPU。
[edit] 我的意思是:
struct node *curr = *first;
struct node *prev;
while( curr != NULL )
{
prev = curr;
curr = curr->next;
free(prev);
}
*first = NULL;
一般来说,我发现你指向的指针越少,代码就越容易理解。
答案 1 :(得分:0)
node* remove_node(node **double_pointer,int search_value)
//pass head of your node as a parameter to double pointer
{while(*double_pointer && **(double_pointer).value!=search_value)
{
double_pointer=&((**double_pointer)->next);
}
if(**double_pointer!=null)
{//lines below are to delete the node which contains our search value
node* deleted_node=*double_pointer;
*double_pointer=*double_pointer->next;
return deleted node;
}}