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;
}