Je suis à la recherche à la solution dans ce post Reversing a linked list in Java, recursivelyInverser LinkedList en Java
J'ai copié le une des solutions ci-dessous. Je l'ai mis en place et ça fonctionne bien.
public ListNode Reverse(ListNode list)
{
if (list == null) return null; // first question
if (list.next == null) return list; // second question
// third question - in Lisp this is easy, but we don't have cons
// so we grab the second element (which will be the last after we reverse it)
ListNode secondElem = list.next;
// bug fix - need to unlink list from the rest or you will get a cycle
list.next = null;
// then we reverse everything from the second element on
ListNode reverseRest = Reverse(secondElem);
// then we join the two lists
secondElem.Next = list;
return reverseRest;
}
Ce que je ne comprends pas, cependant, ce sont les dernières lignes.
secondElem.next = list;
return reverseRest;
Il semble que nous ne retournons pas le secondElem? Mais j'ai débogué à travers le code et on dirait que secondElem est déjà dans reverseRest. Est-ce parce que c'est une référence par valeur dans Java et qu'il est automatiquement mis à jour quand secondElem.Next=list
est appliqué?
Mieux encore, utilisez 'descendingIterator()'. –
cela dépend s'il veut «éternellement» inverser la liste, ou juste vouloir l'itérer dans l'ordre inverse. – Bozho