J'ai suivi du code de code pour inversion de la liste liée. Je suis confus pendant que la boucle et j'apprécierais certainement si quelqu'un peut fournir une explication visuelle de la manière dont il fonctionne en réalité.
5 Réponses :
la liste ressemblait à: Nous avons inversé chaque pièce de la liste p> donc, maintenant commence maintenant est à la fin, et commence maintenant. Nous pouvons examiner la liste des différents points et voir: p>
Pouvez-vous fournir une explication schématique à quel point les choses se passent en réalité à chaque étape?
Vérifiez le lien dans l'autre commentaire: OpenStHra.com / C-Tidbits / Liste inverse-linked-Ust-3-PTRS
Oui, ma réponse donne une représentation visuelle
J'ai fait un diagramme dans DOT que je pense expliquera graphiquement ce qui se passe:
< / P>
Lien vers une image de taille complète p>
Et voici la source de point (bâclée) au cas où quelqu'un se soucie: p>
C'est beaucoup plus utile. Pas étonnant qu'ils disent qu'une image vaut mille mots
OK, voici ma tentative de rendre la réponse de Valya encore plus claire (bien que je pensais que c'était très bien déjà):
Disons que nous avons cette liste: p> la ligne alors nous avons donc sur le Série d'itération suivante de la boucle tandis que alors nous le faisons à nouveau: p> Une fois que nous avons eu le dernier élément de la liste liée ( maintenant em>, étant donné A code>, qui contient un pointeur (
suivant code>) sur
B code>: p>
suivant = actuel-> suivant; code> définit
suivant code> à
B code> (assez simple). La ligne suivante
actuelle-> suivante = résultat; code> Est-ce que: p>
résultat = actuel; code> qui Définit
résultat code> à
A code> (à nouveau, assez simple). Et enfin, nous avons le tout important
actuel = suivant; code>, lequel définit
actuel code> sur
B code>. P>
Suivant code> défini sur
B code>,
résultat code> défini sur
A code> et
actuel code> défini sur
B code>, nous commençons: p>
E code> dans cet exemple), cela se produit: p>
actuel code> est NULL, la boucle tandis que la boucle se termine et nous sommes laissés avec: p>
*headRef = result;
voir ici pour un bon explication. Voici l'extrait:
public class List { private class Node { int data; Node next; } private Node head; public void reverse() { if (head == null) return; Node prev = null,curr = head,next = null; while (curr != null) { next = curr.next; curr.next = prev; prev = curr; curr = next; } head = prev; } } The list: ========== 1->2->3->4->5 ------------------------------------------------------------------ Running of the code: ============================ At start: ********** head = 1; prev = null,curr = 1, next = null 1st iteration of while loop: ****************************** next = 2; 2->3->4->5 curr.next = null; 1->null prev = 1; 1->null curr = 2; 2->3->4->5 2nd iteration of while loop: ****************************** next = 3 3->4->5 curr.next = 1 2->1->null prev = 2 2->1->null curr = 3 3->4->5 3rd iteration of while loop: ****************************** next = 4 4->5 curr.next = 2 3->2->1->null prev = 3 3->2->1->null curr = 4 4->5 4th iteration of while loop: ****************************** next = 5 5->null curr.next = 3 4->3->2->1->null prev = 4 4->3->2->1->null curr = 5 5->null 5th iteration of while loop: ****************************** next = null null curr.next = 4 5->4->3->2->1->null prev = 5 5->4->3->2->1->null curr = null There is no 6th iteration and the while loop terminates since curr is null and the check is for curr != null. last statement: ================== head = prev This statement leaves the list reversed with referencing head with the reversed node prev to become the new head node.