AccaDiHotel17 ha scritto:
non capisco cosa ci sia di sbagliato in questa funzione (linguaggio C).
Ciao, in realtà ci sono vari problemi:
- la funzione dovrebbe ritornare la testa della lista, non la coda;
- nella funzione vai a creare n+1 nodi, n all'interno del for e 1 all'esterno;
- una lista è caratterizzata dal fatto che l'ultimo elemento, la coda, debba puntare a NULL, ma nella funzione questo passaggio è assente.
Detto ciò, volendo mantenere quell'impostazione, potresti fare qualcosa del genere:
Ptr_node list_from_array(int v[], int n)
{
Ptr_node head = (Ptr_node)malloc(sizeof(Node));
Ptr_node temp = head;
for(unsigned int i = 0; i < n; ++i)
{
temp->val = v[i];
temp->next = (i == n - 1) ? NULL : (Ptr_node)malloc(sizeof(Node));
temp = temp->next;
}
return head;
}
In ogni caso il mio consiglio è di implementare delle generiche funzioni aggiungi_in_testa() e aggiungi_in_coda() che poi potrai utilizzare anche per list_from_array().
P.S.
Magari è solo una questione di gusti ed abitudine, ma il
typedef Node *Ptr_node;
lo eviterei.