লিংকড লিস্টের শেষ থেকে k সংখ্যক নোড রিভার্স অর্ডারে প্রিন্ট করতে হবে ইটারেটিভ (iterative) পদ্ধতিতে।
ইটারেটিভ মেথড হলো লুপ ব্যবহার করে শর্ত সত্য থাকা পর্যন্ত এক্সিকিউট করা।
উদাহরণ
Linked List: 29->34->43->56->88 Input: k = 2 Output: 56 88

অ্যাপ্রোচ: স্ট্যাক (stack) ডেটা স্ট্রাকচার ব্যবহার করা হয়। লিস্টের এলিমেন্টগুলো স্ট্যাকে পুশ করলে স্ট্যাকের টপে লিস্টের লাস্ট এলিমেন্টগুলো থাকে। সেটা থেকে k বার পপ করে প্রিন্ট করলে শেষ থেকে k নোড রিভার্স অর্ডারে পাওয়া যায়।
অ্যালগরিদম
START
Step 1: Create node structure
Step 2: Function intoList(int data) to create node
Step 3: Function rev(node* head, int count, int k)
temp1 = head; while(temp1 != NULL) count++, temp1 = temp1->next
int array[count], temp2 = count
temp1 = head; while(temp1 != NULL) array[--temp2] = temp1->data, temp1 = temp1->next
for i = 0 to k-1: Print array[i]
Step 4: In main() create list, set k=3, count=0, call rev(head, count, k)
STOP
সি প্রোগ্রাম
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node *next;
};
struct node* intoList(int data) {
struct node* newnode = (struct node*)malloc(sizeof(struct node));
newnode->data = data;
newnode->next = NULL;
return newnode;
}
void rev(struct node* head, int count, int k) {
struct node* temp1 = head;
while (temp1 != NULL) { count++; temp1 = temp1->next; }
int array[count], temp2 = count, i;
temp1 = head;
while (temp1 != NULL) { array[--temp2] = temp1->data; temp1 = temp1->next; }
for (i = 0; i < k; i++) printf("%d ", array[i]);
}
int main() {
printf("\nreverse of a list is: ");
struct node* head = intoList(9);
head->next = intoList(76);
head->next->next = intoList(13);
head->next->next->next = intoList(24);
head->next->next->next->next = intoList(55);
head->next->next->next->next->next = intoList(109);
int k = 3, count = 0;
rev(head, count, k);
return 0;
}
আউটপুট
reverse of a list is: 109 55 24