Ciao
Alcune considerazioni:
- da #include "listOfPairs.h" presumo che tu abbia diviso il programma in più file, ma una volta che metti tutto in un unico file allora le funzioni devono stare prima del main (a meno che tu non le dichiari prima utilizzando dei prototipi);
- per quanto riguarda la funzione printLP non c'è bisogno di utilizzare un altro puntatore a nodo (mi riferisco a Lcurr), in quanto l'argomento della funzione è passato per copia e quindi ogni sua modifica non avrà alcun effetto sulla variabile L del main.
Per quanto riguarda la ricerca delle coppie:
- a cosa serve la variabile cont?
- mettiamo da parte un momento l'argomento lista e semplifichiamo la funzione nel seguente modo:
void allPairsOfSquares(int n)
{
int a = 0;
int b;
while(a <= n / 2)
{
b = 0;
while(b <= a)
{
if(a * a + b * b == n)
{
printf("%d - %d\n", a, b);
}
else
{
b++;
}
}
a++;
}
}
prova a lanciarla per esempio per n=25 e guarda cosa succede. Capirai che quel b++ dovrebbe stare all'esterno dell'else;
- per quanto riguarda la condizione del while più esterno dovrebbe essere a<=n*n. Per esempio per n=25 non ha senso provare fino ad a=n/2=12 visto che già 6*6>n. In teoria la ricerca delle coppie potrebbe essere ottimizzata ulteriormente, ma già così può andar bene.
Veniamo adesso alla questione lista.
Sai cos'è una lista e come funziona? Sai cosa significa aggiungere elementi in testa o in coda ad una lista?
In ogni caso cito Wikipedia:
In informatica, una lista concatenata (o linked list) è una struttura dati dinamica, tra quelle fondamentali usate nella programmazione. Consiste di una sequenza di nodi, ognuno contenente campi di dati arbitrari ed uno o due riferimenti ("link") che puntano al nodo successivo e/o precedente. Una lista concatenata è un tipo di dato auto-referente, in quanto contiene un puntatore ad un altro dato dello stesso tipo. Le liste concatenate permettono l'inserzione e la rimozione di nodi in ogni punto della lista in tempo costante, ma non permettono l'accesso casuale, solo quello sequenziale. Esistono diversi tipi di liste concatenate: liste concatenate semplici, liste concatenate doppie e liste circolari.
Di seguito lo schema di una lista semplicemente concatenata:
https://www.geeksforgeeks.org/wp-content/uploads/gq/2013/03/Linkedlist.png
Una volta che avrai approfondito un po' l'argomento rifletti sulla seguente domanda:
- nella funzione printLP, cosa significa precisamente while(Lcurr)?
Se hai qualche dubbio chiedi pure.