That traversal doesn't traverse. It just skip list to entry->next and would keep resetting.
You could do something like this instead:
link = &((*link)->next);You could do something like this instead:
link = &((*link)->next); *link = (*link)->next;