He cambiado eso que dices, pero sigue saliendo mal, voy a poner todo el programa, gracias por tu ayuda sam90:
Código C++:
Ver original#include <iostream>
#include <cstdlib>
using namespace std;
struct nodo{
int num;
nodo *siguiente;
};
void inserta(nodo **r, int n);
void muestra(nodo *r);
void eliminaUltimo(nodo **r);
int main(){
nodo *raiz = NULL;
inserta(&raiz, 1);
inserta(&raiz, 3);
inserta(&raiz, 5);
cout << endl << endl << "Lista original:" << endl;
muestra(raiz);
eliminaUltimo(&raiz);
eliminaUltimo(&raiz);
cout << endl << endl << "Lista con dos elementos borrados:" << endl;
muestra(raiz);
eliminaUltimo(&raiz);
cout << endl << endl << "Lista vacia:" << endl;
muestra(raiz);
cout << endl << endl;
}
void inserta(nodo **r, int n){
nodo *nuevo, *ultimo;
nuevo=new nodo;
nuevo->num = n;
// Buscamos el último nodo
if(*r == NULL){
nuevo->siguiente = NULL;
*r = nuevo;
}else {
ultimo = *r;
while(ultimo->siguiente != NULL){
ultimo = ultimo->siguiente;
}
nuevo->siguiente = NULL;
ultimo->siguiente = nuevo;
}
}
void muestra(nodo *r){
while(r!= NULL){
cout << endl;
cout << r->num;
r=r->siguiente;
}
}
void eliminaUltimo(nodo **r){
nodo *ulti;
ulti = *r;
nodo *penulti;
penulti = *r;
if(*r!=NULL){
if(ulti->siguiente = NULL){
*r = NULL;
delete ulti;
}else{
while(ulti->siguiente != NULL){
penulti -> siguiente = ulti;
ulti = ulti->siguiente;
}
penulti->siguiente = NULL;
delete ulti;
}
}
}
Salida:
Código consola:
Ver originalLista original:
1
3
5
Lista con dos elementos borrados:
11145392
Lista vacia:
11145392
Presione una tecla para continuar . . .