Print reverse order of linked list with recursion in c
C program for Print reverse order of linked list with recursion. Here problem description and other solutions.
// Include header file
#include <stdio.h>
#include <stdlib.h>
// C program for
// Print reverse of a linked list without actually reversing
// Linked list node
typedef struct LinkNode
{
// Define useful field of LinkNode
int data;
struct LinkNode * next;
}LinkNode;
LinkNode * getLinkNode(int data)
{
// Create dynamic memory of LinkNode
LinkNode * ref = (LinkNode * ) malloc(sizeof(LinkNode));
if (ref == NULL)
{
// Failed to create memory
return NULL;
}
ref->data = data;
ref->next = NULL;
return ref;
}
typedef struct SingleLL
{
// Define useful field of SingleLL
struct LinkNode * head;
struct LinkNode * tail;
}SingleLL;
SingleLL * getSingleLL()
{
// Create dynamic memory of SingleLL
SingleLL * ref = (SingleLL * ) malloc(sizeof(SingleLL));
if (ref == NULL)
{
// Failed to create memory
return NULL;
}
ref->head = NULL;
ref->tail = NULL;
return ref;
}
// Add new Node at end of linked list
void addNode(SingleLL * ref, int data)
{
LinkNode * node = getLinkNode(data);
if (ref->head == NULL)
{
ref->head = node;
}
else
{
// Append the node at last position
ref->tail->next = node;
}
ref->tail = node;
}
// Display reversal view of linked list using recursion
void printReverse(LinkNode * node)
{
if (node == NULL)
{
return;
}
// Visit to next node
printReverse(node->next);
// Display node value
printf(" %d ", node->data);
}
int main()
{
SingleLL * sll = getSingleLL();
// 1 → 2 → 8 → 4 → 9 → 6 → NULL
addNode(sll, 1);
addNode(sll, 2);
addNode(sll, 8);
addNode(sll, 4);
addNode(sll, 9);
addNode(sll, 6);
// Reversal view
// 6 9 4 8 2 1
printReverse(sll->head);
}
Output
6 9 4 8 2 1
Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.
New Comment