Ho provato a fare come hai detto tu, ma mi dava lo stesso problema.Ho cambiato il codice abolendo quel while e il codice funziona in parte. In pratica questa volta ,se io scrivo 6 numeri in questo modo :2 2 3 4 4 5. e metto come numero di ripetizioni 2, mi salverà nella seconda lista il 2 il 4 e il 5.E il programma funziona sempre in questo modo:due li fa giusti e il terzo lo sbaglia
struct elementi *controllo(struct elementi *top,int k,struct elementi *top2){
int c,volte=0;
for(;top!=NULL;top=top->next){
c=top->x;
if(c==top->x)
volte++;
if(volte==k){
top2=coda(top2,c);
volte=0;
}
}
return top2;
}