Вероятно удаление может быть сделано более изящно (надо полагать появятся другие варианты, когда Сообщество проснётся), но вы можете потестировать пока мой. Я его не проверял.
struct Node
{
int data;
struct Node* next;
}* head;
void removeNode(struct Node* el)
{
struct Node* t;
if (el == head){
t = head;
head = head->next;
free(t);
}
else{
for (struct Node* prev = head; prev->next; prev = prev->next){
if (prev->next == el){
t = prev->next;
prev->next = prev->next->next;
free(t);
break;
}
}
}
}