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?