Il problema nel tuo caso è che la tua classe lista fa sia da contenitore dati che da cursore, e normalmente queste due cose si tengono separate. L'idioma classico è quello degli iteratori: chiamando un certo metodo del contenitore dati ti viene restituito un oggetto che ti consente di scorrere i dati del contenitore associato (l'iteratore, appunto), per cui in questa maniera è possibile leggere i dati senza alterare l'oggetto-contenitore.