logo

Inverser une liste chaînée

Étant donné un pointeur vers le nœud principal d’une liste chaînée, la tâche consiste à inverser la liste chaînée. Nous devons inverser la liste en modifiant les liens entre les nœuds.

Exemples :



Saisir : Tête de la liste chaînée suivante
1->2->3->4->NULL
Sortir : La liste chaînée doit être remplacée par,
4->3->2->1->NULL

Saisir : Tête de la liste chaînée suivante
1->2->3->4->5->NULL
Sortir : La liste chaînée doit être remplacée par,
5->4->3->2->1->NULL

collections Java

Saisir : NUL
Sortir : NUL



Saisir : 1->NULL
Sortir : 1->NULL

nom de la ville aux États-Unis
Pratique recommandée Inverser une liste chaînée Essayez-le !

Inversez une liste chaînée par méthode itérative :

L'idée est d'utiliser trois pointeurs courant , précédent, et suivant pour garder une trace des nœuds pour mettre à jour les liens inverses.

Suivez les étapes ci-dessous pour résoudre le problème :



  • Initialiser trois pointeurs précédent comme NULL, courant comme tête , et suivant comme NULL.
  • Parcourez la liste chaînée. Dans une boucle, procédez comme suit :
    • Avant de changer le suivant de courant , stockez le suivant nœud
      • suivant = courant -> suivant
    • Maintenant, mettez à jour le suivant pointeur de courant au précédent
      • courant -> suivant = précédent
    • Mise à jour précédent comme courant et courant comme suivant
      • précédent = actuel
      • courant = suivant

Vous trouverez ci-dessous la mise en œuvre de l’approche ci-dessus :

C++
// Iterative C++ program to reverse a linked list #include  using namespace std; /* Link list node */ struct Node {  int data;  struct Node* next;  Node(int data)  {  this->données = données ;  suivant = NULL ;  } } ; struct LinkedList { Tête de nœud* ;  LinkedList() { head = NULL; } /* Fonction pour inverser la liste chaînée */ void reverse() { // Initialise les pointeurs actuels, précédents et suivants Node* current = head;  Nœud *prev = NULL, *next = NULL ;  while (current != NULL) { // Stocker next next = current->next;  // Inverser le pointeur du nœud actuel current->next = prev;  // Déplace les pointeurs d'une position vers l'avant.  précédent = actuel ;  actuel = suivant ;  } head = précédent;  } /* Fonction pour imprimer la liste chaînée */ void print() { struct Node* temp = head;  while (temp != NULL) { cout<< temp->données<< ' ';  temp = temp->suivant;  } } void push(int data) { Node* temp = new Node(data);  temp->suivant = tête ;  tête = température ;  } } ; /* Code du pilote*/ int main() { /* Commencer avec la liste vide */ LinkedList ll;  ll.push(20);  ll.push(4);  ll.push(15);  ll.push(85);  cout<< 'Given linked list
';  ll.print();  ll.reverse();  cout << '
Reversed linked list 
';  ll.print();  return 0; }>
C
// Iterative C program to reverse a linked list #include  #include  /* Link list node */ struct Node {  int data;  struct Node* next; }; /* Function to reverse the linked list */ static void reverse(struct Node** head_ref) {  struct Node* prev = NULL;  struct Node* current = *head_ref;  struct Node* next = NULL;  while (current != NULL) {  // Store next  next = current->suivant;  // Inverser le pointeur du nœud actuel current->next = prev;  // Déplace les pointeurs d'une position vers l'avant.  précédent = actuel ;  actuel = suivant ;  } *head_ref = précédent; } /* Fonction pour pousser un nœud */ void push(struct Node** head_ref, int new_data) { struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));  new_node->data = new_data;  new_node->suivant = (*head_ref);  (*head_ref) = nouveau_node ; } /* Fonction pour imprimer la liste chaînée */ void printList(struct Node* head) { struct Node* temp = head;  while (temp != NULL) { printf('%d ', temp->data);  temp = temp->suivant ;  } } /* Code du pilote*/ int main() { /* Commencer avec la liste vide */ struct Node* head = NULL;  pousser(&tête, 20);  pousser(&tête, 4);  pousser(&tête, 15);  pousser(&tête, 85);  printf('Liste chaînée donnée
');  printList(tête);  inverser(&tête);  printf('
Liste chaînée inversée 
');  printList(tête);  getchar(); }>
Java
// Java program for reversing the linked list class LinkedList {  static Node head;  static class Node {  int data;  Node next;  Node(int d)  {  data = d;  next = null;  }  }  /* Function to reverse the linked list */  Node reverse(Node node)  {  Node prev = null;  Node current = node;  Node next = null;  while (current != null) {  next = current.next;  current.next = prev;  prev = current;  current = next;  }  node = prev;  return node;  }  // prints content of double linked list  void printList(Node node)  {  while (node != null) {  System.out.print(node.data + ' ');  node = node.next;  }  }  // Driver Code  public static void main(String[] args)  {  LinkedList list = new LinkedList();  list.head = new Node(85);  list.head.next = new Node(15);  list.head.next.next = new Node(4);  list.head.next.next.next = new Node(20);  System.out.println('Given linked list');  list.printList(head);  head = list.reverse(head);  System.out.println('');  System.out.println('Reversed linked list ');  list.printList(head);  } } // This code has been contributed by Mayank Jaiswal>
Python
# Python program to reverse a linked list # Time Complexity : O(n) # Space Complexity : O(1) # Node class class Node: # Constructor to initialize the node object def __init__(self, data): self.data = data self.next = None class LinkedList: # Function to initialize head def __init__(self): self.head = None # Function to reverse the linked list def reverse(self): prev = None current = self.head while(current is not None): next = current.next current.next = prev prev = current current = next self.head = prev # Function to insert a new node at the beginning def push(self, new_data): new_node = Node(new_data) new_node.next = self.head self.head = new_node # Utility function to print the LinkedList def printList(self): temp = self.head while(temp): print(temp.data, end=' ') temp = temp.next # Driver code llist = LinkedList() llist.push(20) llist.push(4) llist.push(15) llist.push(85) print ('Given linked list') llist.printList() llist.reverse() print ('
Reversed linked list') llist.printList() # This code is contributed by Nikhil Kumar Singh(nickzuck_007)>
C#
// C# program for reversing the linked list using System; class GFG {  // Driver Code  static void Main(string[] args)  {  LinkedList list = new LinkedList();  list.AddNode(new LinkedList.Node(85));  list.AddNode(new LinkedList.Node(15));  list.AddNode(new LinkedList.Node(4));  list.AddNode(new LinkedList.Node(20));  // List before reversal  Console.WriteLine('Given linked list ');  list.PrintList();  // Reverse the list  list.ReverseList();  // List after reversal  Console.WriteLine('Reversed linked list ');  list.PrintList();  } } class LinkedList {  Node head;  public class Node {  public int data;  public Node next;  public Node(int d)  {  data = d;  next = null;  }  }  // function to add a new node at  // the end of the list  public void AddNode(Node node)  {  if (head == null)  head = node;  else {  Node temp = head;  while (temp.next != null) {  temp = temp.next;  }  temp.next = node;  }  }  // function to reverse the list  public void ReverseList()  {  Node prev = null, current = head, next = null;  while (current != null) {  next = current.next;  current.next = prev;  prev = current;  current = next;  }  head = prev;  }  // function to print the list data  public void PrintList()  {  Node current = head;  while (current != null) {  Console.Write(current.data + ' ');  current = current.next;  }  Console.WriteLine();  } } // This code is contributed by Mayank Sharma>
Javascript
>

Sortir
Given linked list 85 15 4 20 Reversed linked list 20 4 15 85>

Complexité temporelle : O(N), Parcours de la liste chaînée de taille N.
Espace auxiliaire : O(1)

Inversez une liste chaînée en utilisant la récursivité :

L'idée est d'atteindre le dernier nœud de la liste chaînée en utilisant la récursion puis de commencer à inverser la liste chaînée.

chaîne en C++

Suivez les étapes ci-dessous pour résoudre le problème :

  • Divisez la liste en deux parties : le premier nœud et le reste de la liste chaînée.
  • Appelez reverse pour le reste de la liste chaînée.
  • Liez le reste de la liste chaînée en premier.
  • Correction du pointeur de tête sur NULL

Vous trouverez ci-dessous la mise en œuvre de l’approche ci-dessus :

C++
// Recursive C++ program to reverse // a linked list #include  using namespace std; /* Link list node */ struct Node {  int data;  struct Node* next;  Node(int data)  {  this->données = données ;  suivant = NULL ;  } } ; struct LinkedList { Tête de nœud* ;  LinkedList() { head = NULL; } Node* reverse(Node* head) /* Fonction pour imprimer la liste chaînée */ void print() { struct Node* temp = head;  while (temp != NULL) { cout<< temp->données<< ' ';  temp = temp->suivant;  } } void push(int data) { Node* temp = new Node(data);  temp->suivant = tête ;  tête = température ;  } } ; /* Programme pilote pour tester la fonction ci-dessus*/ int main() { /* Commencer avec la liste vide */ LinkedList ll;  ll.push(20);  ll.push(4);  ll.push(15);  ll.push(85);  cout<< 'Given linked list
';  ll.print();  ll.head = ll.reverse(ll.head);  cout << '
Reversed linked list 
';  ll.print();  return 0; }>
Java
// Recursive Java program to reverse // a linked list import java.io.*; class recursion {  static Node head; // head of list  static class Node {  int data;  Node next;  Node(int d)  {  data = d;  next = null;  }  }  static Node reverse(Node head)    /* Function to print linked list */  static void print()  {  Node temp = head;  while (temp != null) {  System.out.print(temp.data + ' ');  temp = temp.next;  }  System.out.println();  }  static void push(int data)  {  Node temp = new Node(data);  temp.next = head;  head = temp;  }  /* Driver program to test above function*/  public static void main(String args[])  {  /* Start with the empty list */  push(20);  push(4);  push(15);  push(85);  System.out.println('Given linked list');  print();  head = reverse(head);  System.out.println('Reversed linked list');  print();  } } // This code is contributed by Prakhar Agarwal>
Python
'''Python3 program to reverse linked list using recursive method''' # Linked List Node class Node: def __init__(self, data): self.data = data self.next = None # Create and Handle list operations class LinkedList: def __init__(self): self.head = None # Head of list # Method to reverse the list def reverse(self, head): # If head is empty or has reached the list end if head is None or head.next is None: return head # Reverse the rest list rest = self.reverse(head.next) # Put first element at the end head.next.next = head head.next = None # Fix the header pointer return rest # Returns the linked list in display format def __str__(self): linkedListStr = '' temp = self.head while temp: linkedListStr = (linkedListStr + str(temp.data) + ' ') temp = temp.next return linkedListStr # Pushes new data to the head of the list def push(self, data): temp = Node(data) temp.next = self.head self.head = temp # Driver code linkedList = LinkedList() linkedList.push(20) linkedList.push(4) linkedList.push(15) linkedList.push(85) print('Given linked list') print(linkedList) linkedList.head = linkedList.reverse(linkedList.head) print('Reversed linked list') print(linkedList) # This code is contributed by Debidutta Rath>
C#
// Recursive C# program to // reverse a linked list using System; class recursion {  // Head of list  static Node head;  public class Node {  public int data;  public Node next;  public Node(int d)  {  data = d;  next = null;  }  }  static Node reverse(Node head)    if (head == null   // Function to print linked list  static void print()  {  Node temp = head;  while (temp != null) {  Console.Write(temp.data + ' ');  temp = temp.next;  }  Console.WriteLine();  }  static void push(int data)  {  Node temp = new Node(data);  temp.next = head;  head = temp;  }  // Driver code  public static void Main(String[] args)  {  // Start with the  // empty list  push(20);  push(4);  push(15);  push(85);  Console.WriteLine('Given linked list');  print();  head = reverse(head);  Console.WriteLine('Reversed linked list');  print();  } } // This code is contributed by gauravrajput1>
Javascript
>

Sortir
Given linked list 85 15 4 20 Reversed linked list 20 4 15 85>

Complexité temporelle : O(N), visite de chaque nœud une fois
Espace auxiliaire : O(N), Espace de pile d'appel de fonction

Inversez une liste chaînée par la méthode récursive Tail :

L'idée est de conserver trois pointeurs précédent , actuel et suivant , visitez récursivement chaque nœud et créez des liens à l’aide de ces trois pointeurs.

point java

Suivez les étapes ci-dessous pour résoudre le problème :

  • Première mise à jour suivante avec le nœud suivant du courant, c'est-à-dire suivant = actuel -> suivant
  • Créez maintenant un lien inverse du nœud actuel vers le nœud précédent, c'est-à-dire curr->next = prev
  • Si le nœud visité est le dernier nœud, créez simplement un lien inverse du nœud actuel vers le nœud précédent et mettez à jour la tête.

Vous trouverez ci-dessous la mise en œuvre de l’approche ci-dessus :

C++
// A simple and tail recursive C++ program to reverse // a linked list #include  using namespace std; struct Node {  int data;  struct Node* next;  Node(int x) {  data = x;  next = NULL;  } }; void reverseUtil(Node* curr, Node* prev, Node** head); // This function mainly calls reverseUtil() // with prev as NULL void reverse(Node** head) {  if (!head)  return;  reverseUtil(*head, NULL, head); } // A simple and tail-recursive function to reverse // a linked list. prev is passed as NULL initially. void reverseUtil(Node* curr, Node* prev, Node** head) {  /* If last node mark it head*/  if (!curr->suivant) { *head = curr;  /* Mise à jour à côté du nœud précédent */ curr->next = prev;  retour;  } /* Enregistrer le nœud curr->next pour un appel récursif */ Node* next = curr->next;  /* et mise à jour suivant ..*/ curr->next = prev;  reverseUtil(suivant, courant, tête); } // Une fonction utilitaire pour imprimer une liste chaînée void printlist(Node* head) { while (head != NULL) { cout<< head->données<< ' ';  head = head->suivant;  } cout<< endl; } // Driver code int main() {  Node* head1 = new Node(1);  head1->suivant = nouveau nœud (2);  head1->suivant->suivant = new Node(3);  head1->suivant->suivant->suivant = new Node(4);  head1->suivant->suivant->suivant->suivant = new Node(5);  head1->suivant->suivant->suivant->suivant->suivant = new Node(6);  head1->suivant->suivant->suivant->suivant->suivant->suivant = new Node(7);  head1->suivant->suivant->suivant->suivant->suivant->suivant->suivant = new Node(8);  cout<< 'Given linked list
';  printlist(head1);  reverse(&head1);  cout << 'Reversed linked list
';  printlist(head1);  return 0; }>
C
// A simple and tail recursive C program to reverse a linked // list #include  #include  typedef struct Node {  int data;  struct Node* next; } Node; void reverseUtil(Node* curr, Node* prev, Node** head); // This function mainly calls reverseUtil() // with prev as NULL void reverse(Node** head) {  if (!head)  return;  reverseUtil(*head, NULL, head); } // A simple and tail-recursive function to reverse // a linked list. prev is passed as NULL initially. void reverseUtil(Node* curr, Node* prev, Node** head) {  /* If last node mark it head*/  if (!curr->suivant) { *head = curr;  /* Mise à jour à côté du nœud précédent */ curr->next = prev;  retour;  } /* Enregistrer le nœud curr->next pour un appel récursif */ Node* next = curr->next;  /* et mettre à jour next ..*/ curr->next = prev;  reverseUtil(suivant, courant, tête); } // Une fonction utilitaire pour créer un nouveau nœud Node* newNode(int key) { Node* temp = (Node*)malloc(sizeof(Node));  temp->data = clé ;  temp->suivant = NULL ;  température de retour ; } // Une fonction utilitaire pour imprimer une liste chaînée void printlist(Node* head) { while (head != NULL) { printf('%d ', head->data);  head = head->suivant ;  } printf('
'); } // Code du pilote int main() { Node* head1 = newNode(1);  head1->suivant = newNode(2);  head1->suivant->suivant = newNode(3);  head1->suivant->suivant->suivant = newNode(4);  head1->suivant->suivant->suivant->suivant = newNode(5);  head1->suivant->suivant->suivant->suivant->suivant = newNode(6);  head1->suivant->suivant->suivant->suivant->suivant->suivant = newNode(7);  head1-> suivant-> suivant-> suivant-> suivant-> suivant-> suivant-> suivant = newNode (8);  printf('Liste chaînée donnée
');  liste d'impression (tête1);  inverser(&head1);  printf('Liste chaînée inversée
');  liste d'impression (tête1);  renvoie 0 ; } // Ce code est contribué par Aditya Kumar (adityakumar129)>
Java
// Java program for reversing the Linked list class LinkedList {  static Node head;  static class Node {  int data;  Node next;  Node(int d)  {  data = d;  next = null;  }  }  // A simple and tail recursive function to reverse  // a linked list. prev is passed as NULL initially.  Node reverseUtil(Node curr, Node prev)  {  /*If head is initially null OR list is empty*/  if (head == null)  return head;  /* If last node mark it head*/  if (curr.next == null) {  head = curr;  /* Update next to prev node */  curr.next = prev;  return head;  }  /* Save curr->nœud suivant pour appel récursif */ Node next1 = curr.next;  /* et mettre à jour next ..*/ curr.next = prev;  reverseUtil(next1, curr);  retourner la tête ;  } // imprime le contenu de la liste à double chaînage void printList(Node node) { while (node ​​!= null) { System.out.print(node.data + ' ');  noeud = noeud.next;  } } // Code du pilote public static void main(String[] args) { LinkedList list = new LinkedList();  list.head = nouveau nœud (1);  list.head.next = nouveau nœud (2);  list.head.next.next = nouveau nœud (3);  list.head.next.next.next = nouveau nœud (4);  list.head.next.next.next.next = nouveau nœud (5);  list.head.next.next.next.next.next = nouveau nœud (6);  list.head.next.next.next.next.next.next = new Node(7);  list.head.next.next.next.next.next.next.next = new Node(8);  System.out.println('Liste chaînée donnée');  list.printList(head);  Noeud res = list.reverseUtil(head, null);  System.out.println('
Liste chaînée inversée ');  list.printList(res);  } } // Ce code est fourni par Aditya Kumar (adityakumar129)>
Python
# Simple and tail recursive Python program to # reverse a linked list # Node class class Node: # Constructor to initialize the node object def __init__(self, data): self.data = data self.next = None class LinkedList: # Function to initialize head def __init__(self): self.head = None def reverseUtil(self, curr, prev): # If last node mark it head if curr.next is None: self.head = curr # Update next to prev node curr.next = prev return # Save curr.next node for recursive call next = curr.next # And update next curr.next = prev self.reverseUtil(next, curr) # This function mainly calls reverseUtil() # with previous as None def reverse(self): if self.head is None: return self.reverseUtil(self.head, None) # Function to insert a new node at the beginning def push(self, new_data): new_node = Node(new_data) new_node.next = self.head self.head = new_node # Utility function to print the linked LinkedList def printList(self): temp = self.head while(temp): print (temp.data, end=' ') temp = temp.next # Driver code llist = LinkedList() llist.push(8) llist.push(7) llist.push(6) llist.push(5) llist.push(4) llist.push(3) llist.push(2) llist.push(1) print ('Given linked list') llist.printList() llist.reverse() print ('
Reversed linked list') llist.printList() # This code is contributed by Nikhil Kumar Singh(nickzuck_007)>
C#
// C# program for reversing the Linked list using System; public class LinkedList {  Node head;  public class Node {  public int data;  public Node next;  public Node(int d)  {  data = d;  next = null;  }  }  // A simple and tail-recursive function to reverse  // a linked list. prev is passed as NULL initially.  Node reverseUtil(Node curr, Node prev)  {  /* If last node mark it head*/  if (curr.next == null) {  head = curr;  /* Update next to prev node */  curr.next = prev;  return head;  }  /* Save curr->nœud suivant pour appel récursif */ Node next1 = curr.next;  /* et mettre à jour next ..*/ curr.next = prev;  reverseUtil(next1, curr);  retourner la tête ;  } // imprime le contenu de la liste à double chaînage void printList(Node node) { while (node ​​!= null) { Console.Write(node.data + ' ');  noeud = noeud.next;  } } // Code du pilote public static void Main(String[] args) { LinkedList list = new LinkedList();  list.head = nouveau nœud (1);  list.head.next = nouveau nœud (2);  list.head.next.next = nouveau nœud (3);  list.head.next.next.next = nouveau nœud (4);  list.head.next.next.next.next = nouveau nœud (5);  list.head.next.next.next.next.next = nouveau nœud (6);  list.head.next.next.next.next.next.next = new Node(7);  list.head.next.next.next.next.next.next.next = new Node(8);  Console.WriteLine('Liste chaînée donnée');  list.printList(list.head);  Nœud res = list.reverseUtil(list.head, null);  Console.WriteLine('
Liste chaînée inversée ');  list.printList(res);  } } // Ce code a été contribué par Rajput-Ji>
Javascript
>

Sortir
Given linked list 1 2 3 4 5 6 7 8 Reversed linked list 8 7 6 5 4 3 2 1>

Complexité temporelle : O(N), visite de chaque nœud de la liste chaînée de taille N.
Espace auxiliaire : O(N), Espace de pile d'appel de fonction

Inversez une liste chaînée en utilisant L'idée est de stocker tous les nœuds de la pile puis de créer une liste chaînée inversée.

Suivez les étapes ci-dessous pour résoudre le problème :

  • Stockez les nœuds (valeurs et adresse) dans la pile jusqu'à ce que toutes les valeurs soient saisies.
  • Une fois toutes les entrées terminées, mettez à jour le pointeur Head vers le dernier emplacement (c'est-à-dire la dernière valeur).
  • Commencez à faire apparaître les nœuds (valeur et adresse) et stockez-les dans le même ordre jusqu'à ce que la pile soit vide.
  • Mettez à jour le pointeur suivant du dernier nœud de la pile par NULL.

Vous trouverez ci-dessous la mise en œuvre de l’approche ci-dessus :

C++
// C++ program for above approach #include  #include  using namespace std; // Create a class Node to enter values and address in the // list class Node { public:  int data;  Node* next;  Node(int x) {  data = x;  next = NULL;  } }; // Function to reverse the linked list void reverseLL(Node** head) {  // Create a stack 's' of Node type  stacks ;  Noeud* temp = *head;  while (temp->next != NULL) { // Poussez tous les nœuds pour empiler s.push(temp);  temp = temp->suivant ;  } *tête = temp;  while (!s.empty()) { // Stocke la valeur supérieure de la pile dans la liste temp->next = s.top();  // Extrait la valeur de la pile s.pop();  // met à jour le pointeur suivant dans la liste temp = temp->next;  } temp->suivant = NULL; } // Fonction pour afficher les éléments de la liste void printlist(Node* temp) { while (temp != NULL) { cout<< temp->données<< ' ';  temp = temp->suivant;  } } // Programme pour insérer l'arrière de la liste chaînée void insert_back(Node** head, int value) { // nous avons utilisé la méthode d'insertion à l'arrière pour saisir des valeurs // dans la liste. (par exemple : head->1->2->3->4->Null) Node* temp = new Node(value);  temp->suivant = NULL ;  // Si *head est égal à NULL if (*head == NULL) { *head = temp;  retour;  } else { Nœud* last_node = *head;  while (last_node->next != NULL) last_node = last_node->next;  last_node->next = temp;  retour;  } } // Code du pilote int main() { Node* head = NULL ;  insert_back(&head, 1);  insert_back(&head, 2);  insert_back(&head, 3);  insert_back(&head, 4);  cout<< 'Given linked list
';  printlist(head);  reverseLL(&head);  cout << '
Reversed linked list
';  printlist(head);  return 0; } // This code is contributed by Aditya Kumar (adityakumar129)>
Java
// Java program for above approach import java.util.*; class GFG {  // Create a class Node to enter values and address in  // the list  static class Node {  int data;  Node next;  Node(int x) {  data = x;  next = null;  }  };  static Node head = null;  // Function to reverse the linked list  static void reverseLL()  {  // Create a stack 's' of Node type  Stacks = nouvelle pile ();  Température du nœud = tête ;  while (temp.next != null) { // Poussez tous les nœuds pour empiler s.add(temp);  temp = temp.next;  } tête = temp;  while (!s.isEmpty()) { // Stocke la valeur supérieure de la pile dans la liste temp.next = s.peek();  // Extrait la valeur de la pile s.pop();  // met à jour le pointeur suivant dans la liste temp = temp.next;  } temp.next = null;  } // Fonction pour afficher les éléments de la liste static void printlist(Node temp) { while (temp != null) { System.out.print(temp.data + ' ');  temp = temp.next;  } } // Programme pour insérer l'arrière de la liste chaînée static void insert_back(int value) { // nous avons utilisé la méthode d'insertion à l'arrière pour entrer // des valeurs dans la liste. (par exemple : head.1.2.3.4.Null) Node temp = nouveau nœud (valeur);  temp.suivant = null ;  // Si *head est égal à null if (head == null) { head = temp;  retour;  } else { Nœud last_node = head;  while (last_node.next != null) last_node = last_node.next;  last_node.next = temp;  retour;  } } // Code du pilote public static void main(String[] args) { insert_back(1);  insert_back(2);  insert_back(3);  insert_back(4);  System.out.print('Liste chaînée donnée
');  liste d'impression (tête);  inverseLL();  System.out.print('
Liste chaînée inversée
');  liste d'impression (tête);  } } // Ce code est fourni par Aditya Kumar (adityakumar129)>
Python
# Python code for the above approach # Definition for singly-linked list. class ListNode: def __init__(self, val = 0, next=None): self.val = val self.next = next class Solution: # Program to reverse the linked list # using stack def reverseLLUsingStack(self, head): # Initialise the variables stack, temp = [], head while temp: stack.append(temp) temp = temp.next head = temp = stack.pop() # Until stack is not # empty while len(stack)>0 : temp.next = stack.pop() temp = temp.next temp.next = Aucun return head # Code du pilote si __name__ == '__main__' : head = ListNode(1, ListNode(2, ListNode(3, ListNode(4)))) print('Liste chaînée donnée') temp = head while temp: print(temp.val, end=' ') temp = temp.next obj = Solution() print(' 
Liste chaînée inversée') head = obj.reverseLLUsingStack(head) while head: print(head.val, end=' ') head = head.next>
C#
// C# program for above approach using System; using System.Collections.Generic; class GFG {  // Create a class Node to enter  // values and address in the list  public class Node {  public int data;  public Node next;  public Node(int x) {  data = x;  }  };  static Node head = null;  // Function to reverse the  // linked list  static void reverseLL()  {  // Create a stack 's'  // of Node type  Stacks = nouvelle pile();  Température du nœud = tête ;  while (temp.next != null) { // Poussez tous les nœuds // pour empiler s.Push(temp);  temp = temp.next;  } tête = temp;  while (s.Count != 0) { // Stocke la valeur supérieure de // la pile dans la liste temp.next = s.Peek();  // Extrait la valeur de la pile s.Pop();  // Met à jour le pointeur suivant dans // la liste temp = temp.next;  } temp.next = null;  } // Fonction pour afficher // les éléments de la liste static void printlist(Node temp) { while (temp != null) { Console.Write(temp.data + ' ');  temp = temp.next;  } } // Fonction pour insérer l'arrière de la // liste chaînée static void insert_back(int val) { // Nous avons utilisé la méthode d'insertion à l'arrière // pour saisir des valeurs dans la liste. (par exemple : // head.1.2.3.4 .Null) Node temp = new Node(val);  temp.suivant = null ;  // Si *head est égal à null if (head == null) { head = temp;  retour;  } else { Nœud last_node = head;  while (last_node.next != null) { last_node = last_node.next;  } last_node.next = temp;  retour;  } } // Code du pilote public static void Main(String[] args) { insert_back(1);  insert_back(2);  insert_back(3);  insert_back(4);  Console.Write('Liste chaînée donnée
');  liste d'impression (tête);  inverseLL();  Console.Write('
Liste chaînée inversée
');  liste d'impression (tête);  } } // Ce code est contribué par gauravrajput1>
Javascript
>

Sortir
Given linked list 1 2 3 4 Reversed linked list 4 3 2 1>

Complexité temporelle : O(N), visite de chaque nœud de la liste chaînée de taille N.
Espace auxiliaire : O(N), l'espace est utilisé pour stocker les nœuds dans la pile.