In un esercizio viene data una lista di numeri interi collegata con puntatori e un numero intero A. Io devo scrivere una funzione che, senza allocare e deallocare memoria, mi crei una nuova lista contenente i multipli di A che appartenevano alla lista originaria, mantenendo l'ordine in cui si presentavano. In più questa funzione deve restituire il puntatore alla testa della nuova lista.
Ho provato così ma non funge (io l'ho fatta void per semplificarmi le cose e non sapevo dove infilare il return, ma è un problema minore mi sembra):

//la lista è così:

struct list {

int value;

struct list * next_ptr;
};

//la mia funzione sbagliata:

void newlist( struct list **ptrptr, int A, struct list ** dst_ptr) {

struct list *tmp;

while ( *ptrptr != NULL ) {

if( (*ptrptr)->value % A == 0) {

tmp = *ptrptr;

while (*dst_ptr != NULL) {

*dst_ptr = (*dst_ptr)->next_ptr;
}

dst_ptr = &tmp;

ptrptr = &(*ptrptr)->next_ptr;

}

else

*ptrptr = (*ptrptr)->next_ptr;
}

}

Qualche consiglio??? GRAZIE