Vorrei eseguire questa funzione che mi cancelli alcune occorrenze,ma dovendola passare per riferimento non so come fare.Sono nuovo sulle liste.....consigli.....?codice:#include <stdlib.h> #include <stdio.h> typedef struct nod { int data; struct nod *next; } node; node *newnode(void) { return (node *)malloc(sizeof(node)); } /* Dato un intero n>0, costruisce la lista di nodi da 1 ad n */ node* buildlis_n (int n) { node *p, *lis; lis=NULL; while (n>0) { p=newnode(); p->data=n; p->next=lis; lis=p; n--; } return(lis); } /* Stampa degli elementi di una lista */ void printlis(node *lis) { node* tmp; tmp = lis; int somma=0;float media=0;int conteggio=0; printf("\nlista risultato\n"); while (tmp != NULL) { printf(">>>> %d\n", tmp->data) && (somma=somma+tmp->data) && (conteggio=conteggio+1) ; tmp = tmp->next; } printf("Somma %d\n",somma); printf("Conteggio %d \n",conteggio); media=(somma/conteggio); printf("Media %f",media); } void myFree ( node* top ) { node* tmp; tmp = top; while ( top->next != NULL ) { tmp = top->next; free(top); top = tmp; } } void cancella(int x, node **lis) { node *p,*head; if (lis != NULL) { head=*lis; while (head->next != NULL) { if (head->next->data==x) { p=head->next; head->next=head->next->next; free(p); } else head=head->next; } if ((*lis)->data==x) *lis=(*lis)->next; } } int main() { node* head;node* head2; int n;int m=6; printf ("Inserire valore: \n"); scanf ("%d", &n); head = buildlis_n ( n ); printf ("\n-----CONTROLLO-----\n"); cancella(3,head); myFree ( head ); return 0; }

Rispondi quotando