ho un esercizio che dichiarato in input una lista e un vettore di n elementi,se il 1°elemento della lista è presente nel vettore allora deve creare un altro nodo contenente il valore 0 ed agganciare alla lista e restituire con la nuova testa.
esempio: L è 3 -> 2 -> 7 > 8 -> 3 e V = [7, 3, 5]
allora la funzione modifica la lista così 0 -> 3 -> 2 -> 7 -> 8 -> 3.

ecco come ho provato a fare:

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

struct _elem {
    int          info;
    struct _elem *next;
};
typedef struct _elem Elem;
typedef Elem* List;

Elem *crea_lista(int n_list);
List inszero(List L, int V[], int n);
void visualizza(List L);

int main(){

	int n_list,n,i;
	int vett[100];
	scanf("%d",&n);
	 printf(" inserisci gli elementi nel vettore \n");
	  for (i=0;i<n;i++){
		scanf("%d",&vett[i]);
	   }

	printf("INSERISCI n_liste per definire gli elementi nella lista \n");
	scanf("%d",&n_list);
	
	Elem *punta_lista;
	punta_lista=malloc(sizeof(Elem));
	printf("Inserisci gli elementi nella 1° lista: \n");
	
	*punta_lista=*crea_lista(n_list);
	Elem *modifica;
	modifica=malloc(sizeof(Elem));
	modifica=inszero(punta_lista,vett,n);
	
	  visualizza(punta_lista);
	

	return 0;
}

Elem *crea_lista(int n_list){

	Elem *p,*paus;
	int i;
	if (n_list<=0) 
	p=NULL;
 else
      {
       // creazione del 1° nodo
	p=malloc(sizeof(Elem));
	printf("dammi l'informazine\n");
	scanf("%d",&p->info);
	paus=p;
	
      }
	for (i=1;i<n_list;i++){
		
	    paus->next=malloc(sizeof(Elem));
	    paus=paus->next;
	    printf("dammi l'informazine\n");
	    scanf("%d",&paus->info);
		
         }
		
	         paus->next=NULL;
	        
	    return p;
}
List inszero(List L, int V[], int n){

	Elem *p=L,*tempPtr,*curr=L;
        int i;
		
				
	   if (p!=NULL){
		
		tempPtr=malloc(sizeof(Elem));   // forze è qua l'errore?????
        	tempPtr->info=0;                        // forze è qua l'errore ?????? 
		
	

		   for (i=0;i<n;i++){
			if (V[i]==p->info){
				
				 // forze è qua l'errore?????
			        curr=tempPtr;                  //curr punta a tempPtr
                                 // e tempPtr-> contiene l'indirizzo del prossimo elemento cioè p (primo elemento)
				tempPtr->next=p;
			}
		}
	   }
		while (tempPtr!=NULL){
			tempPtr=tempPtr->next;
		}
		
		return curr; //restituisco la testa
}	
	

void visualizza(List L){

	List p;
	p=L;
	while (p!=NULL){
		printf("%d",p->info);
		printf("--->");
		p=p->next;
         }
}
alla fine la lista non viene modificata?