Bueno gente, después de mucho deliberar, prueba y error, he conseguido definir el algoritmo. Gracias de todos modos. Dejo el código por si a alguno le interesa:
Código C:
Ver originalvoid borrarReferencia(ref_info **lista, int ID){
ref_info *q = nuevaRef();
q = *lista;
while(q->next->ID != ID && q->next->titulo != NULL){
q = q->next;
}
if (q->next == NULL){
printf("Error: posicion fin.\n"); return;
}
ref_info *aux = nuevaRef();
aux = q->next;
q->next = aux->next;
}