Scusa, errore di distrazione nel copiare ed editare
codice:
typedef int E;
typedef struct blocchetto{
E elem;
struct blocchetto *next;} blocchetto;
typedef blocchetto *L;
Premesso che un po' di sana identazione non farebbe mai male, siccome non hai postato gli errori che ottieni, questo funziona, vedi le differenze nel tuo codice...
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int E;
typedef struct blocchetto{
E elem;
struct blocchetto *next;
} blocchetto;
typedef blocchetto *L;
L insert(E e,L l){
L q, tmp = l;
L prec;
q = (L)malloc(sizeof(blocchetto));
q->elem = e;
if((tmp == NULL) || (e < tmp->elem)){
q->next = tmp;
return(q);
}
while(tmp != NULL && tmp->elem <= e){
prec = tmp;
tmp = tmp->next;
}
prec->next = q;
q->next = tmp;
return(l);
}
void stampa(L l){
while( l != NULL){
printf("Elemento: %d \n", l->elem);
l = l->next;
}
}
void freeList(L l) {
if(l == NULL)
return;
freeList(l->next);
free(l);
}
int main(){
E e;
L l;
l=NULL;
char risp[3] = "si";
while(strcmp(risp, "no") != 0){
printf("Vuoi inserire un elemento?(si o no) \n");
scanf("%s", risp);
if(strcmp(risp, "si") == 0){
printf("Inserisci elemento: \n");
scanf("%d", &e);
l = insert(e, l);
}
}
stampa(l);
freeList(l);
system("PAUSE");
return(0);
}
P.s. sempre assicurarsi che le variabili siano inizializzate!