Somma tra valori di 2 liste

di il
2 risposte

Somma tra valori di 2 liste

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

2 Risposte

  • Re: Somma tra valori di 2 liste

    In alternativa posso scrivere questo che funziona:
    
    int sommadif1(node *L1, node *L2)
    {
        int sd = 0;
        while (L1!=NULL)
        {
            sd += L1->data;
            L1 = L1->next;
        }
        while (L2!=NULL)
        {
            sd -= L2->data;
            L2 = L2->next;
        }
        return (sd);
    }
    
    Fatto è che mi veniva espressamente richiesto di scrivere una funzione che eseguisse la somma della differenza dei nodi di L1 e L2 in posizione corrispondente. Questa mia soluzione è più una differenza tra somme di tutti i nodi di L1 e L2
  • Re: Somma tra valori di 2 liste

    Risolto,

    non avevo utilizzato il doppio uguale == per testare se la lista è NULL


    Saluti
Devi accedere o registrarti per scrivere nel forum
2 risposte