Salve, mi é stato dato il seguente esercizio da svolgere in c.
"Scrivere una funzione che data unal ista di interi L (con eventual iripetizioni) ed un valore k, restituisca una lista L2 di puntatori agli elementi di L che contengono i lvalore k. Scrivere un main che 1)crei la lista L ;2) prenda in input k; 3)crei la lista L2; 4) Stampi il contenuto puntato da L2."
Questo é il mio codice
#include <stdio.h>
struct elem {
int k;
struct elem *next;
};
struct elem2{
struct elem *e;
struct elem *next;
};
struct elem *insElemInTesta(struct elem *top,int k);
struct elem *eliminaLista(struct elem *top);
struct elem2 *eliminaLista2(struct elem2 *top2);
struct elem *riempiLista();
void stampaLista2(struct elem2 *top2);
struct elem2 *riempilista2(struct elem *top, struct elem2 *top2,int k);
int main()
{
struct elem *top;
struct elem2 *top2;
int k;
top=riempiLista();
printf("Dammi l´elemento da puntare:");
scanf("%d",&k);
top2=riempilista2(top,top2,k);
stampaLista2(top2);
top=eliminaLista(top);
top2=eliminaLista2(top2);
return 0;
}
struct elem *nuovoElemento(int k){
struct elem *nuovo= (struct elem *)malloc(sizeof(struct elem));
nuovo->k=k;
nuovo->next=NULL;
return nuovo;
}
struct elem *insElemInTesta(struct elem *top,int k){
struct elem *nuovo= nuovoElemento(k);
nuovo->next=top;
return nuovo;
}
struct elem *eliminaLista(struct elem *top){
struct elem *c;
while (top != NULL){
c=top;
top=c->next;
free(c);
}
return top;
}
struct elem2 *eliminaLista2(struct elem2 *top2){
struct elem *c;
while (top2 != NULL){
c=top2;
top2=c->next;
free(c);
}
return top2;
}
struct elem *riempiLista(){
struct elem *top=NULL;
int n,i,k;
printf("Quanti elementi vuoi inserire?");
scanf("%d",&n);
for (i=0;i<n;++i) {
printf("Dammi l'elemento %d:",i+1);
scanf("%d",&k);
top=insElemInTesta(top,k);
}
return top;
}
void stampaLista2(struct elem2 *top2){
while (top2!=NULL) {
printf("%p -->",top2->e);
top2=top2->next;
}
printf("NULL\n");
}
struct elem2 *nuovoElemento2(struct elem2 *top2, struct elem *tmp){
struct elem2 *nuovo= (struct elem2 *)malloc(sizeof(struct elem2));
nuovo->e=&tmp;
nuovo->next=NULL;
return nuovo;
}
struct elem2 *insElemInTesta2(struct elem2* top2, struct elem *tmp){
struct elem2 *nuovo= nuovoElemento2(top2,tmp);
nuovo->next=top2;
return nuovo;
}
struct elem2 *riempilista2(struct elem *top, struct elem2 *top2,int k){
struct elem *tmp=top;
while(tmp->next!=NULL){
if(tmp->k==k) {
struct elem2 *nuovo=insElemInTesta2(top2,tmp);
}
tmp=tmp->next;
}
return top2;
}[/size]
Qualcuno mi puó aiutare, mi stampa sempre null
Grazie in anticipo