Quote Originariamente inviata da Bombonera Visualizza il messaggio
Il problema si presenta quando ho una lista del genere

2 -> 1 -> 3-> 1 -> 5 -> 1 -> 8 -> NULL

La sotto-lista che dovrebbe generare è la seguente

1 -> 3-> 1 -> 5 -> 1 -> NULL

invece a me stampa

1 -> 3-> 1 -> NULL
Sei certo che il risultato atteso sia quello esposto? In tale caso, il programma deve estrarre la più lunga sottolista delimitata da due valori identici, il che equivale a ricercare il secondo valore a partire dalla fine. Naturalmente nel caso di liste linkate semplici tale ricerca non è fattibile in modo immediato.

Ne consegue che l'algoritmo da impiegare deve prevedere in ogni caso la scansione dell'intera lista. La più banale implementazione possibile richiede di memorizzare in un puntatore ausiliario la posizione "dell'ultimo nodo" (i.e. quello più a destra) contenente l'eventuale valore identico a quello di apertura.

E' sufficientemente ovvio che, in presenza di più valori identici, il contenuto di tale puntatore ausiliario sarà sovrascritto più e più volte, fino a quando non si incontrerà l'ultimo nodo della lista che contiene il valore ricercato. Tale valore sarà quello ancora contenuto nel puntatore ausiliario a fine loop (ammesso che in lista esistano almeno due istanze del valore cercato, il che non è scontato! Il caso opposto va gestito esplicitamente) e verrà usato per gestire la stampa richiesta. Solo in tale modo sarà possibile, dopo il loop di scansione, ottenere il risultato desiderato.