Código:
Desde ya muchas gracias :D /* ************************************ Programa que crea una lista simplemente ligada insertando nodos al inicio de la lista, y elimina el nodo que esta al final de la lista, ademas incluye una rutina que permite listar el contenido de la lista ligada. ************************************ */ #include <stdio.h> #include <stdlib.h> typedef struct n{ int dato; struct n *sig; }NODO; NODO *raiz; void insertaInicio(int d) { NODO *aux; aux=(NODO *)malloc(sizeof(NODO)); aux->dato=d; aux->sig=NULL; if (raiz==NULL) raiz=aux; else { aux->sig=raiz; raiz=aux; } } void imprimeLista() { NODO *aux; aux=raiz; printf("\nImprime"); while (aux!=NULL) { printf("\nDato: %d", aux->dato); aux=aux->sig; } } void eliminar() { int eliminar; NODO *auxiliar,*anterior; printf("\nQue dato desea eliminar ?"); scanf("%i",&eliminar); printf("\n%i",eliminar); auxiliar=raiz; anterior=raiz; while(auxiliar->sig!=NULL) { printf("\nciclo bien"); if(auxiliar->dato == eliminar){ printf("\nentre"); anterior->sig=auxiliar->sig; free(auxiliar); break; } anterior=auxiliar; auxiliar=auxiliar->sig; } if (eliminar==auxiliar->dato){ } } void insertar_orden(int nuevo_valor) { NODO *auxiliar,*nuevo_nodo,*anterior; auxiliar=raiz; anterior=raiz; nuevo_nodo=(NODO *)malloc(sizeof(NODO)); nuevo_nodo=raiz; if(auxiliar==NULL) { auxiliar->dato=nuevo_valor; auxiliar->sig=raiz; } else if(auxiliar->sig==raiz) if (auxiliar->dato>nuevo_valor) { nuevo_nodo->dato=nuevo_valor; nuevo_nodo->sig=auxiliar; auxiliar->sig=NULL; } else { nuevo_nodo->dato=nuevo_valor; auxiliar->sig=nuevo_nodo; nuevo_nodo->sig=NULL; } else { while(auxiliar->sig!=NULL) { if (nuevo_valor < auxiliar->dato){ nuevo_nodo->dato=nuevo_valor; anterior->sig=nuevo_nodo; nuevo_nodo->sig=auxiliar; break; } anterior=auxiliar; auxiliar=auxiliar->sig; } if (auxiliar->sig==NULL) { nuevo_nodo->dato=nuevo_valor; auxiliar->sig=nuevo_nodo; nuevo_nodo->sig=NULL; } } } void eliminaFinal() { NODO *aux; NODO *ant; aux=raiz; ant=raiz; if (raiz!= NULL) { //la lista no esta vacia while (aux->sig !=NULL) { ant=aux; aux=aux->sig; } if (raiz->sig==NULL) { free(aux); //quiere decir que la lista solo tiene un nodo raiz=NULL; } else { free(aux); ant->sig=NULL; } } } main() { int i,valor; raiz=NULL; for (i=0;i<=5;i++) { printf("\nDame el valor a insertar "); scanf("%i",&valor); insertar_orden(valor); } eliminar(); imprimeLista(); getchar(); }