Home »
C/C++ Data Structure Programs
C program to display a Linked List in Reverse
Display a linked list in reverse: In this tutorial, we will learn how to implement a C program to display the linked list in reverse using recursion.
By Radib Kar Last updated : August 01, 2023
Problem statement
Write a program to display the linked list in reverse order. Note that the original linked list will not change.
Solution
- Create and build the linked list
- Display the original linked list
-
Displaying in reverse order can be done using recursive function
Function reverse_display(node)
IF (node!= NULL)
reverse_display(node->next)
display node value
END IF
Example with Explanation
Let's check how the program runs...
Let the input linked list to be: 1->2->3->4->NULL with head at 1
In Main() it calls
reverse_display(1)
----------------------------------------------------------------
reverse_display(1):
node is not null
reverse_display(1->next) thus it calls reverse_display(2)
----------------------------------------------------------------
reverse_display(2):
node is not null
reverse_display(2->next) thus it calls reverse_display(3)
----------------------------------------------------------------
reverse_display(3):
node is not null
reverse_display(3->next) thus it calls reverse_display(4)
----------------------------------------------------------------
reverse_display(4):
node is not null
reverse_display(4->next) thus it calls reverse_display(NULL)
----------------------------------------------------------------
reverse_display(NULL):
node is null
no further call, control returned to reverse_display(4)
----------------------------------------------------------------
At reverse_display(4)
Control returned from reverse_display(4->next)
So it prints the node value that is 4
Control returns to reverse_display(3)
----------------------------------------------------------------
At reverse_display(3)
Control returned from reverse_display(3->next)
So it prints the node value that is 3
Control returns to reverse_display(2)
----------------------------------------------------------------
At reverse_display(2)
Control returned from reverse_display(2->next)
So it prints the node value that is 2
Control returns to reverse_display(1)
----------------------------------------------------------------
At reverse_display(1)
Control returned from reverse_display(1->next)
So it prints the node value that is 1
Control returns to Main function
Thus it displays 4 3 2 1
C program to display a Linked List in Reverse
#include <stdio.h>
#include <stdlib.h>
struct node {
int data; // data field
struct node* next;
};
void display(struct node* head)
{
struct node* current = head; // current node set to head
printf("traversing the list...\n");
while (current != NULL) { //traverse until current node isn't NULL
printf("%d ", current->data);
current = current->next; // go to next node
}
}
void reverse_display(struct node* head)
{
if (head) {
//recursive call to display in reverse order
reverse_display(head->next);
printf("%d ", head->data);
}
}
struct node* creatnode(int d)
{
struct node* temp = malloc(sizeof(struct node));
temp->data = d;
temp->next = NULL;
return temp;
}
int main()
{
printf("creating the linked list by inserting new nodes at the end\n");
printf("enter 0 to stop building the list, else enter any integer\n");
int k, count = 1, x;
struct node *curr, *temp;
scanf("%d", &k);
struct node* head = creatnode(k); //buliding list, first node
scanf("%d", &k);
temp = head;
///////////////////inserting at the end//////////////////////
while (k) {
curr = creatnode(k);
temp->next = curr; //appending each node
temp = temp->next;
scanf("%d", &k);
}
display(head); // displaying the list
printf("\ndisplaying in reverse order...\n");
reverse_display(head); //display in reverse order
return 0;
}
Output
First run:
creating the linked list by inserting new nodes at the end
enter 0 to stop building the list, else enter any integer
1 2 3 4 0
traversing the list...
1 2 3 4
displaying in reverse order...
4 3 2 1
Second run:
creating the linked list by inserting new nodes at the end
enter 0 to stop building the list, else enter any integer
34 55 2 4 76 -8 6 0
traversing the list...
34 55 2 4 76 -8 6
displaying in reverse order...
6 -8 76 4 2 55 34