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
}