Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Borrar un elemento en una lista enlazada

Estas en el tema de Borrar un elemento en una lista enlazada en el foro de C/C++ en Foros del Web. Buenas, Estoy terminando el proyecto para fin de una asignatura de programación en C pero me he quedado atascado al programar la función "borrar". La ...
  #1 (permalink)  
Antiguo 02/12/2013, 06:47
 
Fecha de Ingreso: diciembre-2008
Mensajes: 50
Antigüedad: 15 años, 11 meses
Puntos: 0
Borrar un elemento en una lista enlazada

Buenas,

Estoy terminando el proyecto para fin de una asignatura de programación en C pero me he quedado atascado al programar la función "borrar". La historia es el algoritmo. La lista es enlazada simple, ya que si fuera doble sería más sencillo. Os dejo el código:

Código C:
Ver original
  1. void borrarReferencia(ref_info **lista, int ID){
  2.     ref_info *q =  nuevaRef(); //inicializa con malloc y demás
  3.     q =  *lista;
  4.    
  5.     while(q->ID != ID){ //El parámetro ID es un int de la struct ref_info
  6.         q = q->next;
  7.     }
  8.  
  9.     /*Aquí es donde entra el problema, ya que este algoritmo no me borra...*/
  10.    
  11.         ref_info *aux = nuevaRef();
  12.    
  13.     aux = q->next;
  14.     q = aux;
  15.    
  16.     free(aux);
  17.    
  18.  
  19. }

Gracias de antemano :)
  #2 (permalink)  
Antiguo 02/12/2013, 16:03
 
Fecha de Ingreso: diciembre-2008
Mensajes: 50
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Borrar un elemento en una lista enlazada

Bueno gente, después de mucho deliberar, prueba y error, he conseguido definir el algoritmo. Gracias de todos modos. Dejo el código por si a alguno le interesa:

Código C:
Ver original
  1. void borrarReferencia(ref_info **lista, int ID){
  2.     ref_info *q =  nuevaRef();
  3.     q =  *lista;
  4.    
  5.     while(q->next->ID != ID && q->next->titulo != NULL){
  6.         q = q->next;
  7.     }
  8.    
  9.     if (q->next == NULL){
  10.       printf("Error: posicion fin.\n");
  11.       return;
  12.     }
  13.    
  14.     ref_info *aux = nuevaRef();
  15.    
  16.     aux = q->next;
  17.     q->next = aux->next;
  18.    
  19.     free(aux);
  20.    
  21.  
  22. }

Etiquetas: elemento, enlazada, int, lista, programa, struct
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:58.