একটি লিংকড লিস্ট দেয়া থাকলে, রিকার্সিভ (recursive) ফাংশন ব্যবহার করে এর রিভার্স অর্ডারে প্রিন্ট করতে হবে। কিন্তু লিস্টকে আসলে রিভার্স করা হবে না, অর্থাৎ নোডগুলোর ক্রম অপরিবর্তিত থাকবে।
প্রোগ্রামটি হেড পয়েন্টারকে নেক্সট নোডে সরিয়ে যাবে যতক্ষণ না NULL পাওয়া যায় (যা লাস্ট নোডে থাকে) এবং হেড নোডের ডেটা প্রিন্ট করবে।

উদাহরণ
Input: 29 34 43 56 Output: 56 43 34 29
অ্যাপ্রোচ: প্রথমে নোডগুলো লিস্টে ইনসার্ট করা হয়। তারপর একটি টেম্প পয়েন্টার প্রথম নোড থেকে শুরু করে NULL না পাওয়া পর্যন্ত ট্রাভার্স করে। লাস্ট নোড থেকে রিটার্ন হয়ার সময় প্রতিটি নোডের ডেটা প্রিন্ট হয়। এভাবে লিস্ট রিভার্স না করেই রিভার্স অর্ডারে প্রিন্ট করা যায়।
অ্যালগরিদম
START
Step 1: Create node structure
Step 2: Function reverse(node* head)
IF head == NULL RETURN
CALL reverse(head->next)
PRINT head->data
Step 3: Function push(node** header, char newdata) to insert at front
Step 4: In main()
head = NULL, push elements, call reverse(head)
STOP
সি প্রোগ্রাম
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node* next;
};
void reverse(struct node* head) {
if (head == NULL) return;
reverse(head->next);
printf("%d ", head->data);
}
void push(struct node** header, char newdata) {
struct node* newnode = (struct node*)malloc(sizeof(struct node));
newnode->data = newdata;
newnode->next = (*header);
(*header) = newnode;
}
int main() {
struct node* head = NULL;
push(&head, 56);
push(&head, 43);
push(&head, 34);
push(&head, 29);
reverse(head);
return 0;
}
আউটপুট
reverse of a linked list 56 43 34 29