Ver Mensaje Individual
  #2 (permalink)  
Antiguo 29/10/2010, 17:03
sam90
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: listas simpl. enlazadas

Aver si entiendo tu implementacion. En la variable "primero" llevas el puntero del primer nodo. Y de ahi se arma tu lista,

Entonce tu problema recide que en borrar nodo lo que haces es poner como primero el siguiente nodo al que borras. Y esto esta mal. Porque estas eliminado todos los nodos que estan atras del tuyo. Fijate si agregas 5 o 6 nodos. si borras el cuarto se van a borrar los tre primeros.

Lo que deberias hacer es llevar un puntero del nodo anteriro que que vas a borrar y enlazar ese nodo anterior con el siguiente al que vas a borrar. Esto se logra en el for que itera nodo a nodo agregadon una variable auxiliar que lleve memoria.

Código C++:
Ver original
  1. ant = null;
  2. for (aux = inicio; aux!=NULL; ant=aux, aux=aux->siguiente)
  3.     if (strcmp(aux->dni,dniop)==0)
  4.     {
  5.      if (ant != null)   // Me fijo que ant no sea nulo. Indica si estoy o no en el primer elemento.
  6.              ant->siguiente  =  aux -> siguiente;
  7.      else
  8.             inicio = aux->siguiente;  // En este caso borro el primer elemento por lo que tengo que modificar el primero.
  9.      free(aux);
  10. }