*first
嗨,我正在尝试创建一个函数来清除将指向的链表,然后**first
应该释放节点并将指针*first
设置为NULL
.
我在掌握双指针时遇到了麻烦,无法让它正常工作。
*first
嗨,我正在尝试创建一个函数来清除将指向的链表,然后**first
应该释放节点并将指针*first
设置为NULL
.
我在掌握双指针时遇到了麻烦,无法让它正常工作。
在删除节点之前,您必须移动到下一个列表元素。否则,您正在访问已释放的内存。
while( *first != NULL )
{
temp = *first;
*first = temp->next;
free(temp);
}
请注意,因为您正在丢弃整个列表,*first
所以最终将是 NULL。所以你可以使用单指针(就像temp
)来遍历你的列表,然后*first = NULL
在最后设置。这节省了额外的指针间接,在这种情况下可以说是浪费 CPU。
[编辑]我的意思是:
struct node *curr = *first;
struct node *prev;
while( curr != NULL )
{
prev = curr;
curr = curr->next;
free(prev);
}
*first = NULL;
通常,我发现您进行的指针取消引用越少,代码就越容易一目了然。
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;
}}