No puede ser que sea la comparacion con el if que lo que haces es una saignacion, entonces siempre va a ser cierto
Código C++:
Ver originalif(ulti->siguiente = NULL){
*r = NULL;
delete ulti;
Código C++:
Ver originalif(ulti->siguiente == NULL){
*r = NULL;
delete ulti;