Removendo nós usando ponteiros

Esta é uma boa maneira de remover um nó de uma lista vinculada de forma simples:

void remove_if(node ** head, remove_fn rm) {
for (node** curr = head; *curr; ) {
node
* entry = *curr;
if (rm(entry)) {
*curr = entry->next;
free
(entry);
}
else
curr
= &entry->next;
}
}