Buongiorno,
devo eseguire un esercizio che richiede quanto segue:
date due liste note di interi, creare una funzione che restituisca il valore pari alla somma della differenza dei valori contenuti nei singoli nodi. Le liste sono: L1 = 1, 2, 3; L2 = 1, 2, 3, 4
In altri termini devo scorrere le liste ed eseguire (L1(1) - L2(1)) + (L1(2) - L2(2)) ecc... fino a giungere al termine della lista L1 e quindi avrò + (0 - L2(4)). Il risultato ovviamente sarà -4.
Ho realizzato questo codice in DevCpp
typedef struct nod
{
int data;
struct nod *next;
}node;
popolo le liste con funzioni (non riporto per semplicità); poi richiamo questa funzione:
int sommadif(node *L1, node *L2)
{
int sd = 0;
while ((L1!=NULL) && (L2!=NULL))
{
sd += L1->data - L2->data;
L1 = L1->next; L2 = L2->next;
}
if (L2=NULL)
{
while (L1!=NULL)
{
sd += L1->data - 0;
L1 = L1->next;
}
}
if (L1=NULL)
{
while (L2!=NULL)
{
sd += 0 - L2->data;
L2 = L2->next;
}
}
return (sd);
}
Questo il problema: fin che le due liste NON sono finite e quindi !=NULL, ciclo nel primo while; poi la L1 termina (ha solo 3 nodi contro i 4 di L2). Questa istruzione è saltata "if (L2=NULL)" (corretto), il problema è che mi salta anche quest'altra "if (L1=NULL)" e quindi ottendo il valore errato. In debug se controllo *L1 vale 0x0 cioè NULL giusto? Mentre se controllo *L2 sarà pari ad un indirizzo ... non capisco il perchè non venga eseguito il ciclo "while (L2!=NULL)". Avete qualche consiglio suggerimento? Grazie 1000.
Saluti