Un método interesante para imprimir el reverso de una lista enlazada

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *