Questo é il codice attualmente
In input metto 3 interi (1,2,4) e come k metto 3 ma in ogni caso me lo inserisce sempre in testa
Ho aggiunto anche il return nel primo if in una versione precedente ma non é cambiato niente
#include <stdio.h>
#include <stdlib.h>
struct elem {
int k;
struct elem *next;
};
struct elem *nuovoElemento(int k){
struct elem *nuovo= (struct elem *)malloc(sizeof(struct elem));
nuovo->k=k;
nuovo->next=NULL;
return nuovo;
}
struct elem *insElemInTesta(struct elem *top,int k){
struct elem *nuovo= nuovoElemento(k);
nuovo->next=top;
return nuovo;
}
struct elem *insElemInMezzo(struct elem *top,struct elem *pre,int k){
struct elem *nuovo= nuovoElemento(k);
if (pre==NULL) {
nuovo->next=top;
top=nuovo;
}
else {
nuovo->next=pre->next;
pre->next=nuovo;
}
return top;
}
struct elem *eliminaLista(struct elem *top){
struct elem *c;
while (top != NULL){
c=top;
top=c->next;
free(c);
}
return top;
}
struct elem *riempiLista(){
struct elem *top=NULL;
int n,i,k;
printf("Quanti elementi vuoi inserire?");
scanf("%d",&n);
for (i=0;i<n;++i) {
printf("Dammi l'elemento %d:",i+1);
scanf("%d",&k);
top=insElemInTesta(top,k);
}
return top;
}
void stampaLista(struct elem *top){
while (top!=NULL) {
printf("%d -->",top->k);
top=top->next;
}
printf("NULL\n");
}
struct elem *InserisciOrdinato(struct elem *top, int k){
struct elem* curr;
if(top==NULL)
top=insElemInTesta(top,k);
else if(top->k>k) top=insElemInTesta(top,k);
else{
curr=InserisciOrdinato(top->next,k);
top->next=curr;
}
return top;
}
int main()
{
int k;
struct elem* top;
top=riempiLista();
printf("Dammi elemento k:");
scanf("%d",&k);
top=InserisciOrdinato(top,k);
stampaLista(top);
top=eliminaLista(top);
return 0;
}