Veran tengo el siguiente código pero me falla al intentar insertar en orden me sale mi error favorito segmentation fault la clase solo tuve 1 hora asi que no entendi bn mi clase se lo que significa el error pero no se porque me lo da :S me podrian ayudar porfavor aca dejo mi código y antes que lo olvide al eliminar datos mi código no me funciona para el primer y último nodo
Código:
/* ************************************
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();
}
Desde ya muchas gracias :D