一般删除方法:
node *remove_if(node *head, remove_fn rm)
{
node *cur = head, *prev = NULL;
while(cur)
{
node *next = cur->next;
if( rm(cur) )
{
if(prev)
prev->next = next;
else
head = next;
free(cur);
}
else
prev = cur;
cur = next;
}
return head;
}
二级指针删除方法:
node *remove_if(node **phead, remove_fn rm)
{
for( node **cur = phead; *cur; )
{
node *entry = *cur;
if( rm(entry) )
{
*cur = entry->next;
free(entry);
}
else
cur = &entry->next;
}
return *head;
}
一个最简单的链表应该是下面的结构: