Nos dan una lista enlazada, necesitamos imprimir la lista enlazada en orden inverso.
Ejemplos:
Input : list : 5-> 15-> 20-> 25 Output : Reversed Linked list : 25-> 20-> 15-> 5 Input : list : 85-> 15-> 4-> 20 Output : Reversed Linked list : 20-> 4-> 15-> 85 Input : list : 85 Output : Reversed Linked list : 85
Para imprimir una lista en orden inverso, ya hemos discutido los métodos iterativos y recursivos para invertir .
En esta publicación, se analiza un método interesante, que no requiere recursividad y no modifica la lista. La función también visita cada Node de la lista enlazada solo una vez.
Truco: la idea detrás de imprimir una lista en orden inverso sin ninguna función recursiva o bucle es usar el retorno de carro («r»). Para esto, debemos tener conocimiento de la longitud de la lista. Ahora, debemos imprimir n-1 espacio en blanco y luego imprimir el primer elemento, luego «r», más nuevamente n-2 espacios en blanco y el segundo Node, luego «r» y así sucesivamente.
Retorno de carro («r»): ordena un impresora (cursor o la pantalla de una consola del sistema), para mover la posición del cursor a la primera posición en la misma línea.
C/C++
// C program to print reverse of list
#include <stdio.h>
#include <stdlib.h>
/* Link list node */
struct Node {
int data;
struct Node* next;
};
/* Function to reverse the linked list */
void printReverse(struct Node** head_ref, int n)
{
int j = 0;
struct Node* current = *head_ref;
while (current != NULL) {
// For each node, print proper number
// of spaces before printing it
for (int i = 0; i < 2 * (n - j); i++)
printf(" ");
// use of carriage return to move back
// and print.
printf("%d\r", current->data);
current = current->next;
j++;
}
}
/* Function to push a node */
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->next = (*head_ref);
(*head_ref) = new_node;
}
/* Function to print linked list and find its
length */
int printList(struct Node* head)
{
// i for finding length of list
int i = 0;
struct Node* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
i++;
}
return i;
}
/* Driver program to test above function*/
int main()
{
/* Start with the empty list */
struct Node* head = NULL;
// list nodes are as 6 5 4 3 2 1
push(&head, 1);
push(&head, 2);
push(&head, 3);
push(&head, 4);
push(&head, 5);
push(&head, 6);
printf("Given linked list:\n");
// printlist print the list and
// return the size of list
int n = printList(head);
// print reverse list with help
// of carriage return function
printf("\nReversed Linked list:\n");
printReverse(&head, n);
printf("\n");
return 0;
}
Java
// Java program to print reverse of list import java.io.*; import java.util.*; // Represents node of a linkedlist class Node { int data; Node next; Node(int val) { data = val; next = null; } } public class GFG { /* Function to reverse the linked list */ static void printReverse(Node head, int n) { int j = 0; Node current = head; while (current != null) { // For each node, print proper number // of spaces before printing it for (int i = 0; i < 2 * (n - j); i++) System.out.print(" "); // use of carriage return to move back // and print. System.out.print("\r" + current.data); current = current.next; j++; } } /* Function to push a node */ static Node push(Node head, int data) { Node new_node = new Node(data); new_node.next = head; head = new_node; return head; } /* Function to print linked list and find its length */ static int printList(Node head) { // i for finding length of list int i = 0; Node temp = head; while (temp != null) { System.out.print(temp.data + " "); temp = temp.next; i++; } return i; } // Driver code public static void main(String args[]) { /* Start with the empty list */ Node head = null; // list nodes are as 6 5 4 3 2 1 head = push(head, 1); head = push(head, 2); head = push(head, 3); head = push(head, 4); head = push(head, 5); head = push(head, 6); System.out.println("Given linked list: "); // printlist print the list and // return the size of list int n = printList(head); // print reverse list with help // of carriage return function System.out.println("Reversed Linked list: "); printReverse(head, n); System.out.println(); } } // This code is contributed by rachana soma
C#
// C# program to print reverse of list using System; // Represents node of a linkedlist public class Node { public int data; public Node next; public Node(int val) { data = val; next = null; } } public class GFG { /* Function to reverse the linked list */ static void printReverse(Node head, int n) { int j = 0; Node current = head; while (current != null) { // For each node, print proper number // of spaces before printing it for (int i = 0; i < 2 * (n - j); i++) Console.Write(" "); // use of carriage return to move back // and print. Console.Write("\r" + current.data); current = current.next; j++; } } /* Function to push a node */ static Node push(Node head, int data) { Node new_node = new Node(data); new_node.next = head; head = new_node; return head; } /* Function to print linked list and find its length */ static int printList(Node head) { // i for finding length of list int i = 0; Node temp = head; while (temp != null) { Console.Write(temp.data + " "); temp = temp.next; i++; } return i; } // Driver code public static void Main(String []args) { /* Start with the empty list */ Node head = null; // list nodes are as 6 5 4 3 2 1 head = push(head, 1); head = push(head, 2); head = push(head, 3); head = push(head, 4); head = push(head, 5); head = push(head, 6); Console.WriteLine("Given linked list: "); // printlist print the list and // return the size of list int n = printList(head); // print reverse list with help // of carriage return function Console.WriteLine("Reversed Linked list: "); printReverse(head, n); Console.WriteLine(); } } // This code is contributed by Arnab Kundu
Python3
# Python3 program to print reverse of list # Link list node class Node: def __init__(self): self.data= 0 self.next=None # Function to reverse the linked list def printReverse( head_ref, n): j = 0 current = head_ref while (current != None): i = 0 # For each node, print proper number # of spaces before printing it while ( i < 2 * (n - j) ): print(end=" ") i = i + 1 # use of carriage return to move back # and print. print( current.data, end = "\r") current = current.next j = j + 1 # Function to push a node def push( head_ref, new_data): new_node = Node() new_node.data = new_data new_node.next = (head_ref) (head_ref) = new_node return head_ref; # Function to print linked list and find its # length def printList( head): # i for finding length of list i = 0 temp = head while (temp != None): print( temp.data,end = " ") temp = temp.next i = i + 1 return i # Driver program to test above function # Start with the empty list head = None # list nodes are as 6 5 4 3 2 1 head = push(head, 1) head = push(head, 2) head = push(head, 3) head = push(head, 4) head = push(head, 5) head = push(head, 6) print("Given linked list:") # printlist print the list and # return the size of list n = printList(head) # print reverse list with help # of carriage return function print("\nReversed Linked list:") printReverse(head, n) print() # This code is contributed by Arnab Kundu
Producción:
Given linked list: 6 5 4 3 2 1 Reversed Linked List: 1 2 3 4 5 6
Ilustración de entrada y salida:
Entrada: 6 5 4 3 2 1
1.ª iteración _ _ _ _ _ 6
2.ª iteración _ _ _ _ 5 6
3.ª iteración _ _ _ 4 5 6
4.ª iteración _ _ 3 4 5 6
5.ª iteración _ 2 3 4 5 6
Salida final 1 2 3 4 5 6
NOTA: Es posible que el programa anterior no funcione en el compilador en línea porque no admite nada como el retorno de carro en su consola.
Referencia:
stackoverflow/Carriage return
Este artículo es una contribución de Shivam Pradhan (anuj_charm) . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA