Tu ne peux pas revenir en arrière dans une liste simplement chainée, à part en gardant la référence sur le première "cellule".
Le problème, c'est que tu donnes uniquement la partie "main" de ton code corrigé, sans la Liste corrigée, c'est dur de t'aider.
Sinon oui, mon histoire de Cellule est bien une liste chainée. Une cellule est "chainée" à une autre. Je te conseille de revoir le concept complet de liste chainée car cela n'a pas l'air bien clair dans ta tête.
Explication de ma Liste et Cellule.
La Cellule correspond à la valeur stockée, ainsi qu'au lien vers une autre Cellule, qui se trouve donc être la suivante dans la liste chainée. La référence est null au départ, étant donné qu'on ne créé qu'une cellule simple qui n'est reliée à aucune autre.
La liste peut-être vue comme une classe "utilitaire" qui te permet de manipuler les Cellules sans avoir à les créer manuellement dans ton "main" par exemple. Dans cette liste, on garde toujours une référence sur la toute première Cellule qui est la tête de liste. Cette référence ne change pas une fois la première cellule créée.
On garde aussi une référence vers la dernière cellule, et donc changera au fur et à mesure que l'on ajoute des cellules. De cette manière, nous pouvons ajouter directement en fin de liste, sans avoir à parcourir toute la liste chainée (c'est à dire parcourir toutes les cellules) pour trouver la dernière cellule. Il suffit donc de créer une Cellule simple, contenant la valeur que l'on souhaite ajouter (passée en paramètre de méthode). Cette cellule est "chainée" à notre dernière cellule de la liste. C'est à dire qu'on stock la référence de notre nouvelle cellule dans la dernière cellule. Vu que l'on viens d'ajouter une nouvelle cellule, nous changeons notre référence de la dernière cellule vers la cellule que l'on viens de créer.
La méthode getValeur permet juste de récupérer la valeur qui se trouve à l'index donné (0 pour la première etc ...)
La méthode toString parcours toutes les cellules une par une à partir de la première, et construit une chaine de caractère contenant chacune des valeurs.
Il est tout à fait possible de fusionner les deux, c'est à dire ce que tu essayes de faire, mais je trouve cela plus compliqué à comprendre (donc en gros, une liste est juste composée d'une valeur et d'une "sous-liste")
De plus, si tu devais fournir ta classe Liste à quelqu'un, il devrait normalement uniquement utiliser les méthodes de cette classe, et ne pas devoir gérer autre chose (par exemple: ce que tu fais ligne 29 dans ton dernier code fournit, et qui est faux, vu que tu ne stock pas ce qui est retourné).
Si tu n'arrives toujours pas à comprendre, je te conseille de revoir la POO, comment programmer en Java et le concept de liste chainée.
EDIT: Les explications de TheMightyEagle aident aussi ! (Merci !)