Je suis étudiant pour un examen avec Listes Liées en C. Je me suis trouvé un "critique" il avait cet extrait de code. Pour la vie de moi, je ne peux pas comprendre comment le reste est inversé. Ici c'est ... il est de Linked List Problems par Mr.Nick Parlante (pris CIS Library, Stanford). Je vais mettre dans les commentaires de M. Nick.Aide pour comprendre l'extrait de code qui inverse la liste liée en utilisant la récursivité
RecursiveReverse() Solution
Probablement le plus dur est d'accepter le concept selon lequel la RecursiveReverse (& repos) fait en fait inverser le reste. Ensuite, il y a une astuce pour obtenir le nœud frontal jusqu'à la fin de la liste. Faire un dessin pour voir comment fonctionne le tour.
void RecursiveReverse(struct node** headRef) {
struct node* first;
struct node* rest;
if (*headRef == NULL) return; // empty list base case
first = *headRef; // suppose first = {1, 2, 3}
rest = first->next; // rest = {2, 3}
if (rest == NULL) return; // empty rest base case
RecursiveReverse(&rest); // Recursively reverse the smaller {2, 3} case
// after: rest = {3, 2}
first->next->next = first; // put the first elem on the end of the list
first->next = NULL; // (tricky step -- make a drawing)
*headRef = rest; // fix the head pointer
}
Je l'ai fait d'innombrables dessins pour tenter de retracer ce qui se passe, et je ne peux pas comprendre comment RecursiveRest (& repos) inverse fait le reste. S'il vous plaît aider. Je suis très frustré. Ce que je finis par obtenir est plus petit "repos" et rien n'est inversé. Merci beaucoup d'avance.
Excellent graphique :) – sarnold
@sarnold Merci :). J'essaie d'être un peu utile :). –
Merci beaucoup, monsieur! Je l'ai déjà compris. – Scared