Ciao,ho dichiarato la variabile cont all'interno della funzione (se è questo che intendevi con "alloca un elemento, utilizzalo e ritornalo")cioè l'ho resa locale, ho chiamato la funzione come mi hai indicato ed ho provveduto a pulire i buffer (anche se non ho ben capito se bisogna pulirli dopo ogni scanf o alla fine dell'inserimento di tutti i campi di cont) ma non ho ottenuto il risultato sperato.
Allego la parte di codice modificata in modo che puoi darci un'occhiata; se ho frainteso le tue indicazioni ti chiedo di ridarmele in una forma più elementare (sono autodidatta ed è solo 1 mese che ho preso in mano il "C").
Ho pulito il buffer anche dopo la scanf che memorizza la risposta alla domanda se stampare o meno i contatti.
Ti saluto e ti ringrazio in anticipo.


codice:
struct elemento *ins_elem() {
    struct elemento *p,*punt;
    int n,i;
    printf("quanti elementi vuoi inserire in rubrica? ");
    scanf("%d",&n);
    if (n==0) {
        p=NULL;
    }else {
        
        //inserimento primo contatto+++++++++++++++++++++++++++++++++++++++++++++++++++++++
        
        p=(struct elemento*)malloc(sizeof(struct elemento));
        printf("\nInserisci il primo elemento\n");
        //ins_contact();
        p->contatto=ins_contact();//&cont;
        punt=p;//associo il puntatore che scorrerà la lista 
        
        //creo gli altri elementi+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        for (i=2; i<=n; i++) {
            punt->pun=(struct elemento*)malloc(sizeof(struct elemento));//creo l'altro elemento
            punt=punt->pun;
            printf("\nInserisci il %d elemento\n ",i);
            //ins_contact();
            punt->contatto=ins_contact();//&cont;
        }
        punt->pun=NULL;
    }
    return p;
}
struct contatti *ins_contact() {
    struct contatti cont;
    printf("\nInserisci il cognome: ");
    scanf("%s",cont.cog);
    while (getchar()!='\n');
    printf("\nInserisci il nome   : ");
    scanf("%s",cont.nome);
    while (getchar()!='\n');
    printf("\nInserisci il tel    : ");
    scanf("%s",cont.tel);
    while (getchar()!='\n');
    return &cont;
}