কম্পিউটার

সি প্রোগ্রামে অতিরিক্ত স্থান এবং পরিবর্তন ছাড়াই লিঙ্কযুক্ত তালিকার বিপরীত মুদ্রণ করুন।


কাজটি হল অতিরিক্ত স্থান ব্যবহার না করে লিঙ্ক করা তালিকার শেষ থেকে শুরু হওয়া নোডগুলিকে প্রিন্ট করা যার মানে কোন অতিরিক্ত ভেরিয়েবল থাকা উচিত নয় তার পরিবর্তে প্রথম নোডকে নির্দেশকারী হেড পয়েন্টারটি সরানো হবে।

উদাহরণ

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

  1. C প্রোগ্রামে O(1) অতিরিক্ত স্থান ব্যবহার করে n x n স্পাইরাল ম্যাট্রিক্স প্রিন্ট করুন।

  2. লিংকড লিস্টের বিকল্প নোড (পুনরাবৃত্ত পদ্ধতি) সি ভাষায় প্রিন্ট করুন

  3. প্রকৃতপক্ষে সি ভাষায় বিপরীত না করে একটি লিঙ্কযুক্ত তালিকার বিপরীত মুদ্রণ করুন

  4. O(n) সময়ে অ্যারের বাম ঘূর্ণন এবং C প্রোগ্রামে O(1) স্থান মুদ্রণ করুন।