PDA

View Full Version : [c] concat liste


thewebsurfer
26-01-2009, 18:36
typedef struct nodo *lista;
typedef struct nodo {
int val;
lista next;
} nodo;

/* prototipi di funzioni */
lista concatList(lista L1, lista L2);

/* Function: concatList
* Usage: L1 = concatList (L1, L2);
* -----------------------------------------------
* Concatena L1 e L2, creando un link fra l’ultimo nodo di L1 ed il primo di L2.
* ATTENZIONE: una delle liste, o entrambe, potrebbero essere vuote.
* Restituisce il puntatore al nodo di testa della lista così ottenuta.
*/
lista concatList (lista L1, lista L2)
{

nodo *corrente;
nodo *precedente;

if(L1==NULL) return L2;
if(L2==NULL) return L1;

corrente = L1;
while(corrente!=NULL){
precedente = corrente;
corrente=corrente->next;
}

corrente=L2;

return L1;
}


ho risolto cosi...è una buona soluzione?errori?:help:

Kenger
26-01-2009, 19:49
Se guardi bene hai fatto un errore piuttosto ovvio. Dopo che avrai scorso la lista l2 andrà messo in precedente->next non in corrente. Se lo metti in corrente
vai a mettere la testa della lista 2 in una variabile senza mai modificare la lista 1

thewebsurfer
26-01-2009, 20:05
Se guardi bene hai fatto un errore piuttosto ovvio. Dopo che avrai scorso la lista l2 andrà messo in precedente->next non in corrente. Se lo metti in corrente
vai a mettere la testa della lista 2 in una variabile senza mai modificare la lista 1

scusami ma la L2 non la scorro.
dopo aver scorso L1, in corrente secondo me c'è il puntatore NULL dell'ultimo elemento della lista..
dici di no?:cry:

Kenger
27-01-2009, 09:09
Hai ragione, manca una virgola nella frase. Doveva essere:
"Dopo che avrai scorso la lista, l2 andrà "

Visto che l'uscita dal while avviene quando corrente è = a NULL allora dentro corrente c'è semplicemente il valore NULL. Corrente non punta a nessuno elemento della lista, quindi è impossibile che una modifica di corrente possa in qualche modo modificare la lista.

thewebsurfer
27-01-2009, 13:23
Hai ragione, manca una virgola nella frase. Doveva essere:
"Dopo che avrai scorso la lista, l2 andrà "

Visto che l'uscita dal while avviene quando corrente è = a NULL allora dentro corrente c'è semplicemente il valore NULL. Corrente non punta a nessuno elemento della lista, quindi è impossibile che una modifica di corrente possa in qualche modo modificare la lista.

ma porc:muro: :muro:
hai ragione..
eppur mi era venuto il dubbio...vabbè ormai l'esame è fatto (figurati che ho dimenticato anche l'istruzione "corrente = L1", quella dopo gli IF)
se prendo 10/18 è già molto sto giro:mc: