Buenas, es la primera vez que posteo en estos foros así que no me amonesten si cometo faltas dentro de ellos, o no tan fuerte. Mi duda es la siguiente: Necesito que mi programa elimine un nodo en especifico a partir de un identificador, cuando coloco el identificador el programa si elimina el nodo. Pero ocurre un problema que es cuando el nodo que intento eliminar no es el primero y luego lo intento mostrar.
Tengo entendido que si el nodo esta al final de la lista(? (no estoy seguro si se dice así) se debe apuntar el nodo anterior a NULL, lo único es que no sé como hacerlo
Además de que tengo otro problema que es cuando el identificador que intento eliminar no lo encuentra, el programa
Estuve buscando ejemplos que pueda ver en el foro, pero no encuentro uno que pueda entender al 100%. Si pudieran ayudarme, se los agradeceria. Además de que puedan explicarme como es este proceso de eliminar (Como leer el código en sí)
[
#include <stdio.h>
#include <stdlib.h>
struct nodo
{
int dato;
char nombre[10],telefono[7];
struct nodo *puntero;
};
typedef nodo lista;
lista *nuevo,*inicio,*fin;
void crear_nodos()
{
nuevo=new(nodo);
printf("\nNuevo elemento.\n");
printf("Identificador: ");
scanf("%d",&nuevo->dato);
printf("Nombre: ");
fflush(stdin);
fgets(nuevo->nombre,10,stdin);
printf("Telefono: ");
fgets(nuevo->telefono,7,stdin);
nuevo->puntero= NULL;
if (inicio==NULL)
{
printf("Primer elemento\n");
inicio = nuevo;
fin = nuevo;
}
else
{
fin->puntero = nuevo;
/* hacemos que el nuevo sea ahora el último */
fin = nuevo;
}
}
void mostrar_nodos()
{
lista *auxiliar;
auxiliar=inicio;
while(auxiliar!=NULL)
{
printf("###################\n");
printf("Identificador: %d\n",auxiliar->dato);
printf("Nombre: %s\n",auxiliar->nombre);
printf("Telefono: %s\n",auxiliar->telefono);
auxiliar=auxiliar->puntero;
}
printf("\n");
}
void borrarNodo()
{
system("cls");
nuevo = inicio;
if(nuevo != NULL)
{
nodo *aux = NULL, *ant = NULL;
ant = new nodo;
aux = new nodo;
printf("INTRODUZCA EL ID A ELIMINAR: ");
scanf("%d",&aux->dato);
while(aux->dato != nuevo->dato)
{
ant = nuevo;
nuevo = nuevo->puntero;
}
if(nuevo == inicio)
{
inicio = inicio->puntero;
free(ant);
free(aux);
printf("ELEMENTO 1 ELIMINADO");
}else if(aux->dato == nuevo->dato)
{
ant = nuevo;
nuevo = nuevo->puntero;
free(ant);
free(aux);
printf("ELEMENTO x ELIMINADO");
}
}else
printf("NO HAY ELEMENTOS PARA ELIMINAR");
}
void menu()
{
int op;
system("cls");
printf (" Menu Principal\n");
printf(" 1.- Insertar Nodos \n");
printf(" 2.- Mostrar Nodos\n");
printf(" 3.- Eliminar Nodos \n");
printf(" 4.- Salir \n");
printf(" Seleccione opcion: ");
scanf("%d",&op);
switch (op)
{
case 1: system("cls");
printf("Ingresa los nodos a la lista");
crear_nodos();
system("pause");
menu();
case 2: system("cls");
printf("Muestra los nodos de la lista\n");
mostrar_nodos();
system("pause");
menu();
case 3: system("cls");
printf("Elimina nodos\n");
borrarNodo();
system("pause");
menu();
case 4: exit(0);
default: printf("Opcion no valida");
system("pause");
menu();
}
}
void main()
{
menu();
}
Sé que no debo usar fflush(stdin); pero aún no sé una manera de pedir una variable entera sin usar scanf para que fgets no se salte xD
lo único que se me ocurre es poner
ant->puntero= NULL;
fin->puntero = ant;
fin = ant;
pero nada me funciona