il testo dell'esercizio è:
Si consideri il seguente tipo:

typedef struct lista {
int val;
struct lista *next;
} testa, *testa;

Scrivere una funzione testa insarray(testa p, int k, int v[], int n) che modifica la lista di interi L inserendo, immediatamente prima del k-esimo elemento di L, n nuovi elementi con valori dati dall'array A e ritorna la lista modificata. La numerazione degli elementi della lista inizia da zero, se la lista non ha il k-esimo elemento, i nuovi elementi sono aggiunti in coda. Ad esempio, se L è 10 -> 11-> 12 -> 13 e A = {1, 2} (quindi n = 2), ecco come è modificata la lista per diversi valori di k:

k = 0 1 -> 2 -> 10 -> 11-> 12 -> 13
k = 2 10 -> 11-> 1 -> 2 -> 12 -> 13
k = 6 10 -> 11-> 12 -> 13 -> 1 -> 2

io l'ho eseguito in questo modo:

codice:
testa insarray(testa p, int k, int v[], int n){
    int i=0,m=0;
    
    if(k==0){
        testa nuovalista;
        for(int j=0;j<n;j++){
            testa nuovo=(lista*) malloc(sizeof(lista));
            nuovo->val=v[i];
            nuovo->next=p;
            nuovalista=nuovo;
        }
        
        return nuovalista;
    } 
    else{
        testa t=p;
        while(t!=NULL){
            t=t->next; m++; 
        }
        
        if(k<m){
            
            while(i<k){ 
                p=p->next; 
                i++; 
            }
            
            testa temp=p->next;
            testa tail;
            
            for(int j=0;j<n;j++){
                testa nuovo=(lista*) malloc(sizeof(lista));
                nuovo->val=v[i];
                nuovo->next=NULL;
                tail=p;
                
                while(tail->next!=NULL) 
                    tail=tail->next;
                tail->next=nuovo;
            }
            p->next=temp;
        } 
        else
            if(k>m){
                for(int j=0;j<n;j++){
                    testa nuovo=(lista*) malloc(sizeof(lista));
                    nuovo->val=v[i];
                    nuovo->next=NULL;
                    
                    testa e=p;
                    while (e->next != NULL)
                        e = e->next;
                    e->next=nuovo;
                }
            }
    }
        
      return p;  
}
purtroppo non ho con me il mio computer quindi non ho potuto compilare e verificare se il mio codice è giusto, quindi in caso avessi sbagliato qualcosa e/o il codice non fosse corretto, sapreste dirmi dove ho sbagliato?