কাজটি হল অতিরিক্ত স্থান ব্যবহার না করে লিঙ্ক করা তালিকার শেষ থেকে শুরু হওয়া নোডগুলিকে প্রিন্ট করা যার মানে কোন অতিরিক্ত ভেরিয়েবল থাকা উচিত নয় তার পরিবর্তে প্রথম নোডকে নির্দেশকারী হেড পয়েন্টারটি সরানো হবে।
উদাহরণ
Input: 10 21 33 42 89 Output: 89 42 33 21 10
লিঙ্ক করা তালিকাটিকে বিপরীত ক্রমে প্রিন্ট করার জন্য অনেকগুলি সমাধান হতে পারে, যেমন রিকার্সিভ পদ্ধতি (অতিরিক্ত স্থান ব্যবহার করুন), লিঙ্ক করা তালিকাটি বিপরীত করুন (প্রদত্ত লিঙ্কযুক্ত তালিকায় পরিবর্তন প্রয়োজন), উপাদানগুলিকে স্ট্যাকের উপর ঠেলে এবং তারপর উপাদানগুলিকে পপ করে প্রদর্শন করুন। একে একে (স্থান O(n) প্রয়োজন), কিন্তু এই সমাধানগুলি O(1) এর চেয়ে বেশি স্থান ব্যবহার করছে বলে মনে হচ্ছে।
O(1) এর বেশি ব্যবহার না করে ফলাফল অর্জন করতে আমরা -
- একটি লিঙ্ক করা তালিকায় নোডের সংখ্যা গণনা করুন
- i =n থেকে 1 লুপ করুন এবং i-তম অবস্থানের নোডটি প্রিন্ট করুন।
অ্যালগরিদম
START Step 1 -> create node variable of type structure Declare int data Declare pointer of type node using *next Step 2 ->Declare function int get(struct node* head) Declare variable as int count=0 Declare struct node *newme=head Loop While newme!=NULL Increment count by 1 Set newme = newme->next End Return count Step 3 -> Declare Function void push(node** headref, char newdata) Allocate memory using malloc Set newnode->data = newdata Set newnode->next = (*headref) Set (*headref) = newnode Step 4 -> Declare function int getN(struct node* head, int n) Declare struct node* cur = head Loop for int i=0 and i<n-1 && cur != NULL and i++ Set cur=cur->next End Return cur->dataStep 5 -> Declare function void reverse(node *head) Declare int n = get(head) Loop For int i=n and i>=1 and i— Print getN(head,i) End Step 6 ->In Main() Create list using node* head = NULL Insert elements through push(&head, 89) Call reverse(head) STOP
উদাহরণ
#include<stdio.h> #include<stdlib.h> //node structure struct node { int data; struct node* next; }; void push(struct node** headref, int newdata) { struct node* newnode = (struct node*) malloc(sizeof(struct node)); newnode->data = newdata; newnode->next = (*headref); (*headref) = newnode; } int get(struct node* head) { int count = 0; struct node* newme = head; while (newme != NULL){ count++; newme = newme->next; } return count; } int getN(struct node* head, int n) { struct node* cur = head; for (int i=0; i<n-1 && cur != NULL; i++) cur = cur->next; return cur->data; } void reverse(node *head) { int n = get(head); for (int i=n; i>=1; i--) printf("%d ", getN(head, i)); } int main() { struct node* head = NULL; //create a first node push(&head, 89); //pushing element in the list push(&head, 42); push(&head, 33); push(&head, 21); push(&head, 10); reverse(head); //calling reverse function return 0; }
আউটপুট
যদি আমরা উপরের প্রোগ্রামটি চালাই তবে এটি নিম্নলিখিত আউটপুট তৈরি করবে
89 42 33 21 10