Vorrei fare la premessa , che forse dovresti ricominciare da capo , visto che creare una lista in una
funzione void "che non restituisce niente" e non accetta nessun parametro , ha poco senso e utilità


Comunque , il problema che ti si presenta è dovuto al fatto che list_record lo fai puntare
di volta in volta al nodo successivo , e quindi alla fine punta all'ultimo nodo , quindi se fai
stampare stamperà solo l'ultimo nodo visto che il successivo è NULL


invece di usare list_record , puoi usare list_head
codice:
for(i=2; i<=n; i++)
       {
          list_record->next=(struct elemento *)malloc(sizeof(struct elemento));
          list_record = list_record->next;
          printf("\nInserisci il %d elemento: ", i);
          scanf("%d",&newval);
          list_record->valore = newval;
         // list_head=list_record;  xxxxxx questa istruzione è scorretta head deve sempre
         // puntare al primo nodo la testa della lista altrimenti ne perdi il riferimento
    list_pointer = list_head;
       }

while(list_head != NULL){
    printf("%d", list_head->valore); // visualizza l’informazione 
       printf(" -> ");
       list_head = list_head->next; //scorre di un elemento
    }