ora funziona grazie YuYevon.

ho riscritto il codice così

codice:
#include<stdio.h>
#include<stdlib.h>

struct list{
  int dato;
  struct list*next;
};

int main(){
  int i,n;
  struct list *primo;
  struct list *tmp;  
 
primo=(struct list*)malloc(sizeof(struct list));
 
  primo->next=NULL;

  tmp=(struct list*)malloc(sizeof(struct list));
  tmp=primo;

  scanf("%d", &n);
  
      for(i=0;i<n-1;i++){
    
               tmp->next=(struct list*)malloc(sizeof(struct list));
               tmp=tmp->next;
  }
  
  tmp->next=NULL;
  tmp=primo;
  
      while((tmp->next)!=NULL){
        scanf("%d", &(tmp->dato));
       tmp=tmp->next;
  }
  scanf("%d",&(tmp->dato));

  tmp=primo;
   
  printf(" \n ");
 
     while(tmp->next!=NULL){
         printf(" %d ", tmp->dato);
          tmp=tmp->next;
  } 
  printf(" %d ", tmp->dato);
  
  return 0;
}