Salve a tutti, mi stavo esercitando sulle liste ma non riesco a risolvere un problema che mi si e' presentato. Come avrete intuito dal titolo devo inserire degli elementi(interi) in maniera crescente in una lista data. Io ho provato a fare questo programma che funziona se l'elemento da inserire è maggiore del primo della lista. Tuttavia non funziona se l'elemento è minore, cioè non mi inserisce il numero e mi stampa la lista così come è. Il problema dovrebbe riguardare il primo if della funzione "inserimento_in_ordine".Se può essere d'aiuto ho visto che se stampo la parte relativa all'if allora stampa bene ma così come è posta non va. Qualcuno ha idea da cosa potrebbe dipendere?
Grazie in anticipo a chi mi risponderà.
typedef struct s_node
{
int info;
struct s_node* next;
}t_nodo;
typedef t_nodo *p_nodo;
typedef struct s_lista ///contiene puntatore a testa e numero degli elemnti
{
p_nodo testa;
int N; ///numero di elementi
}t_lista;
t_lista crea_lista()
{
t_lista ris;
ris.N=0;
ris.testa=NULL;
return ris;
}
t_lista aggiungi_testa(t_lista lista,int valore)
{
p_nodo nuovo;
nuovo=malloc(sizeof(t_nodo));
if(nuovo==NULL)
{
printf("errore di allocazione\n\n");
exit(1);
}
nuovo->info=valore;
nuovo->next=lista.testa;
lista.testa=nuovo;
lista.N++;
return lista;
}
void stampa_lista(t_lista l)
{
p_nodo p1;
p1=l.testa;
while(p1!=NULL)
{
printf("%d--> ",p1->info);
p1=p1->next;
}
printf("NULL\n");
}
t_lista inserimento_in_ordine(t_lista lista,int val)
{
p_nodo p,p1,p2;
p=malloc(sizeof(t_nodo));
p->info=val;
p->next=NULL;
if(lista.testa==NULL || ((lista.testa)->info)>val)
{
p->next=lista.testa;
lista.testa=p;
return lista;
//stampa_lista(lista);
}
else
{
p1=lista.testa;
p2=lista.testa->next;
while(p2!=NULL && (p2->info<val))
{
p1=p2;
p2=p2->next;
}
p1->next=p;
p->next=p2;
return lista;
//stampa_lista(lista);
}
lista.N++;
}
int main()
{
srand(time(NULL));
int val,i=0,a;
t_lista l;
l=crea_lista();
printf("quanti numeri vuoi inserire nella lista?\n");
scanf("%d",&val);
for(i=0;i<val;i++)
l=aggiungi_testa(l,rand()%30+1);
stampa_lista(l);
printf("scrivi un elemento per inserirlo in ordine:\n");
scanf("%d",&a);
inserimento_in_ordine(l,a);
stampa_lista(l);
}