Maison > développement back-end > C++ > Programme C pour inverser la liste chaînée

Programme C pour inverser la liste chaînée

WBOY
Libérer: 2023-09-07 20:13:02
avant
657 Les gens l'ont consulté

Programme C pour inverser la liste chaînée

Dans cette question, on nous donne une liste chaînée. Notre tâche est de créer un programme pour inverser une liste chaînée.

Ce programme inversera la liste chaînée donnée et renverra la liste chaînée inversée.

Une liste chaînée est une séquence liée contenant des éléments. Chaque lien contient une connexion vers un autre lien.

Exemple

9 -> 32 -> 65 -> 10 -> 85 -> NULL
Copier après la connexion

Liste chaînée inversée consiste à créer une liste chaînée en inversant les liens de la liste chaînée. Le nœud principal de la liste chaînée deviendra le dernier nœud de la liste chaînée, et le dernier nœud deviendra le nœud principal.

Exemple

Liste chaînée inversée formée à partir de la liste chaînée ci-dessus −

85 -> 10 -> 65 -> 32 -> 9 -> NULL
Copier après la connexion

Pour inverser la liste chaînée donnée, nous utiliserons trois pointeurs supplémentaires à traiter. Ces pointeurs sont précédents, après et actuels.

Nous définirons initialement previous et after sur NULL, et définirons current en tête de la liste chaînée.

Après cela, nous itérons jusqu'à atteindre NULL de la liste chaînée initiale. Ensuite, procédez comme suit :

after = current ->
next current ->
next = previous
previous = current
current = after
Copier après la connexion

Créons maintenant un programme pour inverser la liste chaînée. Il existe deux manières de créer ce programme, l’une itérative et l’autre récursive.

Programme pour inverser une liste chaînée (méthode récursive de queue)

Exemple

Démonstration

#include <stdio.h>
struct Node {
   int data;
   struct Node* next;
};
Node* insertNode(int key) {
   Node* temp = new Node;
   temp->data = key;
   temp->next = NULL;
   return temp;
}
void tailRecRevese(Node* current, Node* previous, Node** head){
   if (!current->next) {
      *head = current;
      current->next = previous;
      return;
   }
   Node* next = current->next;
   current->next = previous;
   tailRecRevese(next, current, head);
}
void tailRecReveseLL(Node** head){
   if (!head)
      return;
   tailRecRevese(*head, NULL, head);
}
void printLinkedList(Node* head){
   while (head != NULL) {
      printf("%d ", head->data);
      head = head->next;
   }
   printf("</p><p>");
}
int main(){
   Node* head1 = insertNode(9);
   head1->next = insertNode(32);
   head1->next->next = insertNode(65);
   head1->next->next->next = insertNode(10);
   head1->next->next->next->next = insertNode(85);
   printf("Linked list : \t");
   printLinkedList(head1);
   tailRecReveseLL(&head1);
   printf("Reversed linked list : \t");
   printLinkedList(head1);
   return 0;
}
Copier après la connexion

Sortie

Linked list : 9 32 65 10 85
Reversed linked list : 85 10 65 32 9
Copier après la connexion

Programme pour inverser une liste chaînée (méthode itérative)

Exemple

Réel- démonstration du temps

#include <stdio.h>
struct Node {
   int data;
   struct Node* next;
   Node(int data){
      this->data = data;
      next = NULL;
   }
};
struct LinkedList {
   Node* head;
   LinkedList(){
      head = NULL;
   }
   void interReverseLL(){
      Node* current = head;
      Node *prev = NULL, *after = NULL;
      while (current != NULL) {
         after = current->next;
         current->next = prev;
         prev = current;
         current = after;
      }
      head = prev;
   }
   void print() {
      struct Node* temp = head;
      while (temp != NULL) {
         printf("%d ", temp-> data);
         temp = temp->next;
      }
      printf("</p><p>");
   }
   void push(int data){
      Node* temp = new Node(data);
      temp->next = head;
      head = temp;
   }
};
int main() {
   LinkedList linkedlist;
   linkedlist.push(85);
   linkedlist.push(10);
   linkedlist.push(65);
   linkedlist.push(32);
   linkedlist.push(9);
   printf("Linked List : \t");
   linkedlist.print();
   linkedlist.interReverseLL();
   printf("Reverse Linked List : \t");
   linkedlist.print();
   return 0;
}
Copier après la connexion

Sortie

Linked List : 9 32 65 10 85
Reverse Linked List : 85 10 65 32 9
Copier après la connexion

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!

source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal