Maison  >  Article  >  développement back-end  >  Insérer et parcourir de manière récursive une liste chaînée en C++

Insérer et parcourir de manière récursive une liste chaînée en C++

PHPz
PHPzavant
2023-09-10 09:21:13911parcourir

Insérer et parcourir de manière récursive une liste chaînée en C++

Nous obtenons les valeurs entières utilisées pour former la liste chaînée. La tâche consiste d'abord à insérer puis à parcourir la liste à chaînage unique en utilisant la méthode récursive.

Ajouter un nœud récursivement à la fin

  • Si la tête est NULL → Ajouter un nœud à la tête

  • Sinon, ajouter à la tête (tête → suivant)

Parcourir récursivement les nœuds

  • Si la tête est NULL → Quitter

  • Sinon imprimer ( tête → suivant )

Exemple

Entrée− 1 - 2 - 7 - 9 - 10

Sortie

Sortie strong> liste : 1 → 2 → 7 → 9 → 10 → NULL

Input− 12 - 21 - 17 - 94 - 18

Output− Liste chaînée : 12 → 21 → 17 → 94 → 18 → NULL

La méthode utilisée dans le programme suivant Comme suit

Dans cette méthode, nous utiliserons des fonctions pour ajouter des nœuds et parcourir une liste chaînée unique et les appeler de manière récursive pour la prochaine entrée.

  • Prend une struct SLLNode* avec un entier et un pointeur suivant.

  • Function addtoEnd(SLLNode* head, int data) Obtient le pointeur vers l'en-tête de la liste chaînée et l'entier de la partie données, et ajoute le nœud à la fin de la liste chaînée.

    li>
  • Si le pointeur de tête est NULL, la liste est vide, ajoutez maintenant un nouveau nœud et définissez-le comme tête. Ajouter head → next comme NULL. Renvoie un pointeur vers le nœud

  • Si head n'est pas nul, utilisez head->next = addtoEnd(head->next, data) pour ajouter le nœud à head → next.

  • Fonction traverseList(SLLNode* head) Parcourt à partir de la tête et imprime chaque valeur.

  • Si head est NULL, imprimez NULL et revenez

  • Sinon, imprimez la valeur des données et utilisez traverseList(head->next) pour parcourir la suivante.

  • Utilisez addtoEnd() dans la liste de création principale et utilisez traverseList() pour imprimer la liste.

Exemple

#include <bits/stdc++.h>
using namespace std;
struct SLLNode {
   int data;
   SLLNode* next;
};
SLLNode* addtoEnd(SLLNode* head, int data){
   if (head == NULL){
      SLLNode *nodex = new SLLNode;
      nodex->data = data;
      nodex->next = NULL;
      return nodex;
   }
   else{
      head->next = addtoEnd(head->next, data);
    }
   return head;
}
void traverseList(SLLNode* head){
   if (head == NULL){
      cout <<"NULL";
      return;
   }
   cout << head->data << " -> ";
   traverseList(head->next);
}
int main(){
   SLLNode* head1 = NULL;
   head1 = addtoEnd(head1, 1);
   head1 = addtoEnd(head1, 8);
   head1 = addtoEnd(head1, 56);
   head1 = addtoEnd(head1, 12);
   head1 = addtoEnd(head1, 34);
   cout<<"Linked List is :"<<endl;
   traverseList(head1);
   return 0;
}

Output

Si nous exécutons le code ci-dessus, la sortie suivante sera générée

Linked List is :
1 -> 8 -> 56 -> 12 -> 34 -> NULL

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer