1

*first嗨,我正在尝试创建一个函数来清除将指向的链表,然后**first应该释放节点并将指针*first设置为NULL.

我在掌握双指针时遇到了麻烦,无法让它正常工作。

4

2 回答 2

3

在删除节点之前,您必须移动到下一个列表元素。否则,您正在访问已释放的内存。

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;

通常,我发现您进行的指针取消引用越少,代码就越容易一目了然。

于 2013-02-04T04:07:42.067 回答
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;
}}
于 2016-08-01T20:40:27.127 回答