Título: Eliminar todos los repetidos de una lista Publicado por: palacio29 en 20 Junio 2020, 17:37 pm Buenos Dias.
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
Muchas gracias. Título: Re: Eliminar todos los repetidos de una lista Publicado por: Mecanma en 28 Junio 2020, 09:56 am Hola, creo que deberías hacer la comparación fuera de la función así solo se encarga de borrar el nodo. También veo que en la linea 81 y 85 llamas la función de manera recursiva, no sé si tu profesor te lo pidió explicitamente de esta forma.
Título: Re: Eliminar todos los repetidos de una lista Publicado por: 98Fran en 3 Julio 2020, 12:25 pm No se de C pero puede que la nomenclatura en punteros sea la misma que en C++ asíi que por si acaso te dejo aquí unos consejos (si funcionan en C xD).
Primero: Yo usaría más los espacios, cuesta de leer el código: Código: char *nombre; Se leen mejor que: Código: char*nombre; y eso se aplicaría para las funciones o cualquier declaración con punteros. Segundo: para hacer typedef de struct(al menos en C++) no hace falta poner struct Código: char *nombre Tercero: Cuando pasas un t_nodo estas pasando el puntero del nodo, por tanto no hace falta que lo desreferencies para luego pasar la dirección de memoria en el main y lo mismo. Si lo declaras asi: Código: void agregar(t_nodo &, t_dato); Te evitas poner & en el main y queda más fácil de leer. Cuarto: Por lo que he visto, podrías usar un puntero fin para evitar el coste de O(n) que supone recorrer toda la lista. Como no hay clases en C podrias crear una struct extra: Código: struct s_nodo_ini En cuestión a tu problema: usa el nodo aux para moverte, no hace falta usar recursividad de forma innecesaria. Código: void eliminar(t_nodo*nodo,char*texto) |