vabbè va, nella mia enorme bontà, guarda che cosa ti ho postato:
Codice:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef struct _nodo {
char *nome, *indirizzo;
struct _nodo *next;
} nodo, *lista;
nodo *crea(char *nome, char *indirizzo) {
nodo *n = (nodo*)malloc(sizeof(nodo));
n->nome = (char*)malloc(strlen(nome) + 1);
strcpy(n->nome, nome);
n->indirizzo = (char*)malloc(strlen(indirizzo) + 1);
strcpy(n->indirizzo, indirizzo);
n->next = NULL;
return n;
}
void libera(nodo *n) {
free(n->nome);
free(n->indirizzo);
free(n);
}
int main() {
char nome[100], indirizzo[100];
char *sentinella = "fine";
lista l = NULL;
nodo *ultimo = NULL;
while (1) {
printf("nome: ");
scanf("%s", nome);
if (!stricmp(nome, sentinella)) {
break;
}
printf("indirizzo: ");
scanf("%s", indirizzo);
if (!stricmp(indirizzo, sentinella)) {
break;
}
if (ultimo) {
ultimo->next = crea(nome, indirizzo);
ultimo = ultimo->next;
}
else {
ultimo = crea(nome, indirizzo);
l = ultimo;
}
}
// qui di seguito scrivo il codice per la deallocazione,
// ma non sono sicuro che rientri negli obiettivi dell'esercizio,
// quindi casomai lasciala perdere.
ultimo = l;
while (ultimo) {
nodo *n = ultimo;
ultimo = n->next;
libera(n);
}
return 0;
}
non l'ho provato, quindi potrebbe non funzionare, però intanto spero che tu capisca come si fa

ciao