Comment inverser une liste chaînée?
Node reverse(Node head) {
Node previous = null;
Node current = head;
Node forward;
while (current != null) {
forward = current.next;
current.next = previous;
previous = current;
current = forward;
}
return previous;
}
Comment exactement est-il renverser la liste? Je qu'il définit d'abord la deuxième noeud forward
. Puis il dit current.next
est égal à un null
nœud previous
. Puis il dit previous
est maintenant current
. Enfin current
devient forward
?
Je n'arrive pas à saisir cela et comment sa marche arrière. Quelqu'un peut-il expliquer comment cela fonctionne?
- C'est python?
from __future__ import braces
?- de ma faute..fixe à la java!
- 1. Ce code ne semble pas être python... 2. liste inverse est un algorithme de base, vous pouvez trouver beaucoup de matériel connexe sur le web
- Lorsque vous avez un bug ou ne peuvent pas comprendre ce que votre code est fait, la première chose que vous devez faire est d'utiliser votre débogueur. (Qu'est ce que c'est)
- Ce code est Jathon
- Je voudrais attirer un peu 3-noeud lié liste sur une feuille de papier, et il suffit d'aller dans l'algorithme, étape par étape, voir ce qui se passe. On pourrait faire la même chose dans un débogueur, mais de le faire sur papier va vous forcer à bien réfléchir sur la façon dont chaque pièce de l'etat est en train de changer.
- Rappelez-vous la première, il faut stocker le nœud suivant(forward), afin de préserver le lien
- Techlead est que vous???
Vous devez vous connecter pour publier un commentaire.
Vous inversez la liste de manière itérative et toujours avoir la liste dans l'intervalle [tête, précédente] correctement inversé(donc le courant est le premier nœud qui a son lien n'est pas réglée correctement). Sur chaque étape de la manière suivante:
Si vous faites cela pour tous les nœuds que vous pouvez prouver(avec l'induction, par exemple). Que la liste doit être correctement inversée.
Le code tout simplement de marcher sur la liste et inverse les liens jusqu'à ce qu'il atteigne la précédente de queue, qu'il retourne la tête.
Avant:
Après:
Je l'appelle "cherry picking". L'idée est de minimiser le nombre de swaps. La permutation se passe entre un près et de loin à l'index. Ses 2 Pass algorithme.
Exemple 1:
Exemple 2:
Renverser une seule liste liée à l'aide de l'itération
L'idée de base est de détacher le nœud de tête de la première liste et l'attacher à la tête d'une seconde liste. Continuez à répéter jusqu'à ce que le premier de la liste est vide.
Pseudocode:
Si vous voulez quitter la liste d'origine intact, alors vous pouvez coder une copie de la version récursive avec l'utilisation d'une fonction d'assistance.
Noter que la fonction d'assistance est la queue récursive. Cela signifie que vous pouvez créer une copie de renversement à l'aide d'itération.
//mise en œuvre de la seule liste liée inversion de la fonction de
La façon la plus simple de penser qu'il est à penser comme cela:
Diagramme:
D'abord:
1ère Itération
2ème Itération
3ème Itération
Maintenant, il continue en boucle jusqu'à la fin. Donc, finalement, la nouvelle liste devient:
Le code pour la même chose devrait être comme ceci (il est facile à comprendre):
ListNode
s lorsque la tâche n'est pas retourner une liste avec les valeurs dans l'ordre inverse, maisreverse a linked list
? (Pourquoi pas allouer un nouveau nœud pour un seul élément de la liste? Vous pouvez combiner les cas particuliers:if (head == null || head.next == null) return head;
)