Ver Mensaje Individual
  #3 (permalink)  
Antiguo 02/04/2011, 15:03
Avatar de Lobito14
Lobito14
 
Fecha de Ingreso: abril-2010
Mensajes: 222
Antigüedad: 14 años
Puntos: 17
Respuesta: [C++] Problema con función para borrar ultimo nodo de una lista enlazada

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
  1. #include <iostream>
  2. #include <cstdlib>
  3.  
  4. using namespace std;
  5.  
  6. struct nodo{
  7.     int num;
  8.     nodo *siguiente;
  9. };
  10.  
  11. void inserta(nodo **r, int n);
  12. void muestra(nodo *r);
  13. void eliminaUltimo(nodo **r);
  14.  
  15. int main(){
  16.    
  17.     nodo *raiz = NULL;
  18.    
  19.     inserta(&raiz, 1);
  20.     inserta(&raiz, 3);
  21.     inserta(&raiz, 5);
  22.    
  23.     cout << endl << endl << "Lista original:" << endl;
  24.     muestra(raiz);
  25.    
  26.     eliminaUltimo(&raiz);
  27.     eliminaUltimo(&raiz);
  28.    
  29.     cout << endl << endl << "Lista con dos elementos borrados:" << endl;
  30.     muestra(raiz);
  31.    
  32.     eliminaUltimo(&raiz);
  33.    
  34.     cout << endl << endl << "Lista vacia:" << endl;
  35.     muestra(raiz);
  36.    
  37.     cout << endl << endl;
  38.     system("PAUSE");
  39. }
  40.  
  41. void inserta(nodo **r, int n){
  42.    
  43.     nodo *nuevo, *ultimo;
  44.    
  45.     nuevo=new nodo;
  46.     nuevo->num = n;
  47.     // Buscamos el último nodo
  48.     if(*r == NULL){
  49.         nuevo->siguiente = NULL;
  50.         *r = nuevo;
  51.     }else {
  52.         ultimo = *r;
  53.         while(ultimo->siguiente != NULL){
  54.             ultimo = ultimo->siguiente;
  55.         }
  56.         nuevo->siguiente = NULL;
  57.         ultimo->siguiente = nuevo;
  58.     }
  59.    
  60. }
  61.  
  62. void muestra(nodo *r){
  63.    
  64.     while(r!= NULL){
  65.        
  66.         cout << endl;
  67.         cout << r->num;
  68.         r=r->siguiente;
  69.     }
  70. }
  71.  
  72. void eliminaUltimo(nodo **r){
  73.    
  74.     nodo *ulti;
  75.     ulti = *r;
  76.     nodo *penulti;
  77.     penulti = *r;
  78.    
  79.    
  80.     if(*r!=NULL){
  81.        
  82.         if(ulti->siguiente = NULL){
  83.            
  84.             *r = NULL;
  85.             delete ulti;
  86.        
  87.         }else{
  88.            
  89.             while(ulti->siguiente != NULL){
  90.                 penulti -> siguiente = ulti;
  91.                 ulti = ulti->siguiente;
  92.             }
  93.            
  94.             penulti->siguiente = NULL;
  95.             delete ulti;
  96.         }
  97.     }
  98.    
  99. }

Salida:

Código consola:
Ver original
  1. Lista original:
  2.  
  3. 1
  4. 3
  5. 5
  6.  
  7. Lista con dos elementos borrados:
  8.  
  9. 11145392
  10.  
  11. Lista vacia:
  12.  
  13. 11145392
  14.  
  15. Presione una tecla para continuar . . .