Originariamente inviato da oregon
Prima di tutto, questa
nuovo->next==NULL;
e' sbagliata ...
Comunque, non si capisce il ragionamento che hai fatto nella insert ... cosa dovrebbe fare la insert esattamente per te?
E infine ... il ciclo della scanf non termina con lo zero (che e' un valore accettato ...)
Originariamente inviato da MrX87
bhè prima di tutto, direi che è inutile fare 2 typedef:
codice:
typedef struct nodo *lista;
typedef struct nodo {
int val;
nodo* next;
} Nodo;
perchè poi si rischia di fare un pò di confusione, come hai fatto tu in qualche caso: infatti quando richiami la funzione insert, non c'è bisogno che passi il puntatore alla testa per riferimento:
codice:
insert(&concat, val);
anche perchè poi lo ritorni con a funzione stessa (return L)!
No il procedimento va bene
Nodo è un nuovo dato di tipo struttura nodo
e lista invece è un nuovo dato di tipo puntatore a struttura nodo
Originariamente inviato da MrX87
poi la malloc, è una funzione che ritorna un tipo char*, quindi quando non allochi le stringhe è bene fare un cast, come hai fatto tu.
Ma no che dici, la malloc restituisce un puntatore a void*
Originariamente inviato da MrX87
per quanto riguarda il crash, bene in genere quando si inserisce in lista, che sia in testa o coda, si fa sempre in 2 modi: si controlla se il puntatore iniziale è NULL, per vedere se è il primo inserimento, e si procede in un modo, e poi gli altri si eseguono in un altro modo! poi infine volevo spiegato l'utilizzo di quel while() nella funzione insert?? che ti devi ciclare?!
Forse hai letto un pò troppo in fretta il codice.
@ant_alt
Avevi solo fatto un pò di confusione con i puntatori.
codice:
#include<stdio.h>
#include<stdlib.h>
typedef struct nodo *lista;
typedef struct nodo
{
int val;
struct nodo *next;
} Nodo;
lista insert(lista *L, int valore)
{
Nodo *corrente;
Nodo *precedente;
Nodo *nuovo;
nuovo = (Nodo*)malloc(sizeof(Nodo));
if(NULL==nuovo)
{
printf("mem esaurita");
return NULL;
}
nuovo->val = valore;
nuovo->next = NULL;
corrente = *L;
precedente = NULL;
while( NULL!=corrente && valore>corrente->val )
{
precedente = corrente;
corrente = corrente->next;
}
if(NULL==precedente)
{
nuovo->next = *L;
*L = nuovo;
}
else
{
nuovo->next = corrente;
precedente->next = nuovo;
}
return *L;
}
void visualizza( Nodo *L)
{
while( L )
{
printf("%d,", L->val);
L = L->next;
}
printf("\n\n");
}
int main(void)
{
lista concat = NULL;
int val;
printf("inserisci valore nodo (0 termina) : ");
while(scanf("%d", &val)!=0 && val!=0)
{
insert( &concat, val);
printf("inserisci valore nodo (0 termina) : ");
}
visualizza( concat );
system("PAUSE");
return 0;
}