vaya.. 10 días y nadie te ha contestado..

¿llegaste a solucionarlo?
El algoritmo que planteas falla por todos lados

Cuando eliminas un nodo de una lista enlazada (dinámica) tienes que tener en cuenta 5 casos
Salvo en el último donde no tienes que hacer nada (salvo recorrer tooooda la lista

) tienes que tener mucho cuidado con la
actualización de los punteros y el
orden en el que la hagas.
- La lista está vacia ---> cab == NULL
- El nodo a eliminar es el nodo cabecera. --> si la lista tiene mas de un elemento, el segundo pasa a ser el nodo cabecera.
- El nodo a eliminar es el último nodo de la lista. --> el penultimo ahora apuntara a NULL
- El caso general. El nodo a eliminar está dentro de la lista. --> el anterior tiene que apuntar ahora al siguiente (Es el único caso que contemplas pero las actualizaciones de los punteros y el orden están mal)
- No existe el nodo
etc etc.
Espero que lo solucionaras