Queria consultar como podia hacer para eliminar todos los elementos repetidos de una lista.
En este caso lo que hice fue crear una lista que contenga a una estructura y lo que tengo que hacer es que elimine todos los nodos cuyo apellido sea "Lopez".
Lo intento hacer y elimina algunos elementos pero no todos, el problema esta en la función eliminar pero no se como modificarla para que elimine todos y no algunos.
Código
#include <stdio.h> #include <stdlib.h> struct s_datos { char*nombre; char*apellido; int dni; }; typedef struct s_datos t_dato; struct s_nodo { t_dato dato; struct s_nodo*sig; }; typedef struct s_nodo*t_nodo; void agregar(t_nodo*,t_dato); void imprimir(t_nodo); void eliminar(t_nodo*,char*); t_dato cargarstruct(); char*cargatexto(); int main() { t_nodo lista=NULL; agregar(&lista,cargarstruct()); agregar(&lista,cargarstruct()); agregar(&lista,cargarstruct()); agregar(&lista,cargarstruct()); agregar(&lista,cargarstruct()); imprimir(lista); eliminar(&lista,"Lopez"); imprimir(lista); return 0; } t_dato cargarstruct() { t_dato datito; ///CARGAR ESTRUCTURA datito.nombre=cargatexto(); datito.apellido=cargatexto(); return datito; } void agregar(t_nodo*nodo,t_dato datito) { if(*nodo==NULL) { (*nodo)->dato=datito; (*nodo)->sig=NULL; } else { agregar(&(*nodo)->sig,datito); } } void imprimir(t_nodo lista) { if(lista!=NULL) { printf("\nNombre: %s - Apellido: %s - DNI: %d",lista->dato.nombre,lista->dato.apellido,lista->dato.dni); imprimir(lista->sig); } } void eliminar(t_nodo*nodo,char*texto) { t_nodo aux=NULL; if(*nodo==NULL) { return; } { aux=(*nodo); *nodo=(*nodo)->sig; eliminar(&(*nodo)->sig,texto); } else { eliminar(&(*nodo)->sig,texto); } } char*cargatexto() { char letra; int i=0; char*txt=NULL; letra=getche(); while(letra!='\r') { *(txt+i)=letra; i++; letra=getche(); } *(txt+i)='\0'; return txt; }
Muchas gracias.