Ragazzi ho fatto questo programma però non fa quello richiesto dalla consegna. Qualcuno me lo potrebbe correggere??? E' l'unico esercizio che mi manca per completare tutti i vecchi esami del mio professore. Grazie per eventuali risposte.
/*Scrivere il codice di una funzione C che permetta di contare il numero
di valori diversi inseriti in una lista di interi.*/
#include<stdio.h>
#include<stdlib.h>
typedef struct nodo{
int info;
struct nodo *next;
}Nodo;
Nodo *crea_lista();
void stampa_lista(Nodo *);
int controlla(Nodo *);
int main(){
int num;
Nodo *lista;
lista=crea_lista();
stampa_lista(lista);
num = controlla(lista);
printf("Il numero di valori diversi e': %d\n",num);
system("pause");
return 0;
}
Nodo *crea_lista(){
Nodo *p;
Nodo *successivo;
int i,n;
printf("Quanti elementi si vogliono inserire \n");
scanf("%d",&n);
if(n==0)
p=NULL;
else{
p =(Nodo*)calloc(n,sizeof(Nodo));
printf("Inserisci il primo valore\n");
scanf("%d",&p->info);
successivo = p;
for(i=2;i<=n;++i){
successivo->next=(Nodo*)malloc(sizeof(Nodo));
successivo = successivo->next;
printf("Inserisci l'elemento numero %d\n", i);
scanf("%d",&successivo->info);
}
successivo->next=NULL;
}
return(p);
}
void stampa_lista(Nodo *p){
printf("nlista--->");
while(p!=NULL){
printf("%d",p->info);
printf("--->");
p = p->next;
}
printf("\n");
return;
}
int controlla(Nodo *p){
Nodo *successivo;
successivo=p;
int cnt=0;
while(successivo->next!=NULL){
if(p->info == successivo->next->info){
while(p->info == successivo->next->info){
cnt+=0;
successivo = successivo->next;
}}
else{
cnt+=1;
successivo = successivo->next;
}}
return(cnt);
}