📜  打印链接列表的反转而不实际反转

📅  最后修改于: 2022-05-13 01:57:44.979000             🧑  作者: Mango

打印链接列表的反转而不实际反转

给定一个链表,使用递归函数打印它的反向。例如,如果给定的链表是 1->2->3->4,那么输出应该是 4->3->2->1。
请注意,问题仅与打印反向有关。要反转列表本身,请参阅此
难度等级:菜鸟

反向链接列表

算法

printReverse(head)
  1. call print reverse for head->next
  2. print head->data

执行:



C++
// C++ program to print reverse of a linked list
#include 
using namespace std;
 
/* Link list node */
class Node
{
    public:
    int data;
    Node* next;
};
 
/* Function to reverse the linked list */
void printReverse(Node* head)
{
    // Base case
    if (head == NULL)
    return;
 
    // print the list after head node
    printReverse(head->next);
 
    // After everything else is printed, print head
    cout << head->data << " ";
}
 
/*UTILITY FUNCTIONS*/
/* Push a node to linked list. Note that this function
changes the head */
void push(Node** head_ref, char new_data)
{
    /* allocate node */
    Node* new_node = new Node();
 
    /* put in the data */
    new_node->data = new_data;
 
    /* link the old list off the new node */
    new_node->next = (*head_ref);
 
    /* move the head to pochar to the new node */
    (*head_ref) = new_node;
}
 
/* Driver code*/
int main()
{
    // Let us create linked list 1->2->3->4
    Node* head = NULL;
    push(&head, 4);
    push(&head, 3);
    push(&head, 2);
    push(&head, 1);
     
    printReverse(head);
    return 0;
}
 
// This code is contributed by rathbhupendra


C
// C program to print reverse of a linked list
#include
#include
  
/* Link list node */
struct Node
{
    int data;
    struct Node* next;
};
  
/* Function to reverse the linked list */
void printReverse(struct Node* head)
{
    // Base case 
    if (head == NULL)
       return;
 
    // print the list after head node
    printReverse(head->next);
 
    // After everything else is printed, print head
    printf("%d  ", head->data);
}
  
/*UTILITY FUNCTIONS*/
/* Push a node to linked list. Note that this function
  changes the head */
void push(struct Node** head_ref, char new_data)
{
    /* allocate node */
    struct Node* new_node =
            (struct Node*) malloc(sizeof(struct Node));
  
    /* put in the data  */
    new_node->data  = new_data;
  
    /* link the old list off the new node */
    new_node->next = (*head_ref);  
  
    /* move the head to pochar to the new node */
    (*head_ref)    = new_node;
}
  
/* Driver program to test above function*/
int main()
{
    // Let us create linked list 1->2->3->4
    struct Node* head = NULL;   
    push(&head, 4);
    push(&head, 3);
    push(&head, 2);
    push(&head, 1);
   
    printReverse(head);
    return 0;
}


Java
// Java program to print reverse of a linked list
class LinkedList
{
    Node head;  // head of list
 
    /* Linked list Node*/
    class Node
    {
        int data;
        Node next;
        Node(int d) {data = d; next = null; }
    }
 
    /* Function to print reverse of linked list */
    void printReverse(Node head)
    {
        if (head == null) return;
 
        // print list of head node
        printReverse(head.next);
 
        // After everything else is printed
        System.out.print(head.data+" ");
    }
 
    /* Utility Functions */
 
    /* Inserts a new Node at front of the list. */
    public void push(int new_data)
    {
        /* 1 & 2: Allocate the Node &
                  Put in the data*/
        Node new_node = new Node(new_data);
 
        /* 3. Make next of new Node as head */
        new_node.next = head;
 
        /* 4. Move the head to point to new Node */
        head = new_node;
    }
 
    /*Driver function to test the above methods*/
    public static void main(String args[])
    {
        // Let us create linked list 1->2->3->4
        LinkedList llist = new LinkedList();
        llist.push(4);
        llist.push(3);
        llist.push(2);
        llist.push(1);
 
        llist.printReverse(llist.head);
    }
}
/* This code is contributed by Rajat Mishra */


Python3
# Python3 program to print reverse
# of 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
     
    # Recursive function to print
    # linked list in reverse order
    def printrev(self, temp):
         
        if temp:
            self.printrev(temp.next)
            print(temp.data, end = ' ')
        else:
            return
         
    # 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
 
# Driver code
llist = LinkedList()
 
llist.push(4)
llist.push(3)
llist.push(2)
llist.push(1)
 
llist.printrev(llist.head)
     
# This code is contributed by Vinay Kumar(vinaykumar71)


C#
// C# program to print reverse of a linked list
using System;
 
public class LinkedList
{
    Node head; // head of list
 
    /* Linked list Node*/
    class Node
    {
        public int data;
        public Node next;
        public Node(int d)
        {
            data = d; next = null;
        }
    }
 
    /* Function to print reverse of linked list */
    void printReverse(Node head)
    {
        if (head == null) return;
 
        // print list of head node
        printReverse(head.next);
 
        // After everything else is printed
        Console.Write(head.data + " ");
    }
 
    /* Utility Functions */
 
    /* Inserts a new Node at front of the list. */
    public void push(int new_data)
    {
        /* 1 & 2: Allocate the Node &
                Put in the data*/
        Node new_node = new Node(new_data);
 
        /* 3. Make next of new Node as head */
        new_node.next = head;
 
        /* 4. Move the head to point to new Node */
        head = new_node;
    }
 
    /*Driver function to test the above methods*/
    public static void Main(String []args)
    {
        // Let us create linked list 1->2->3->4
        LinkedList llist = new LinkedList();
        llist.push(4);
        llist.push(3);
        llist.push(2);
        llist.push(1);
 
        llist.printReverse(llist.head);
    }
}
 
// This code has been contributed by Rajput-Ji


Javascript


输出:

4 3 2 1

时间复杂度: O(n)

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程