Ho fatto questa lista che deve trovare i multipli tra 2 numeri,secondo voi è formalmente corretta?
P.S.Lanciandola funziona.....

codice:
#include <stdlib.h>
#include <stdio.h>
------FUNZIONI------
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,int minimo,int massimo,int mul)
{
     node* tmp;

     tmp = lis;
     int conteggio=0;


     printf("lista risultato\n");

     while (tmp != NULL) {
           if((tmp->data>minimo) && (tmp->data<massimo) && (tmp->data%mul==0) && (conteggio=conteggio+1))
           printf(">>>> %d\n", tmp->data);
           tmp = tmp->next;

     }
        printf("Conteggio %d\n", conteggio);
}

void myFree ( node* top )
{
    node* tmp;
    tmp = top;

    while ( top->next != NULL ) {
          tmp = top->next;
          free(top);
          top = tmp;
    }
}
------MAIN------
int main()
{
    node* head;
    int n;

    printf ("Inserire valore: ");
    scanf  ("%d", &n);

    int min=0;int max=0;int m=0;

     printf ("Inserire minimo : ");
     scanf  ("%d", &min);

     printf ("Inserire massimo : ");
     scanf  ("%d", &max);

     printf ("Inserire multiplo : ");
     scanf  ("%d", &m);

   head = buildlis_n ( n );

    printlis ( head,min,max,m );

    myFree ( head );

    return 0;
}