কম্পিউটার

একটি লিঙ্ক তালিকা বিপরীত জন্য সি প্রোগ্রাম


এই সমস্যায়, আমরা একটি লিঙ্ক তালিকা দেওয়া হয়. আমাদের কাজ হল একটি লিঙ্ক করা তালিকা বিপরীত করার জন্য একটি প্রোগ্রাম তৈরি করা।

প্রোগ্রামটি প্রদত্ত লিঙ্কযুক্ত তালিকাকে বিপরীত করবে এবং বিপরীত লিঙ্কযুক্ত তালিকা ফিরিয়ে দেবে।

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

উদাহরণ

9 -> 32 -> 65 -> 10 -> 85 -> NULL

বিপরীতভাবে লিঙ্ক করা হয়েছে৷ তালিকা হল একটি লিঙ্কযুক্ত তালিকা যা তালিকার লিঙ্কগুলিকে বিপরীত করে একটি লিঙ্কযুক্ত তালিকা তৈরি করার জন্য তৈরি করা হয়েছে। লিঙ্ক করা তালিকার প্রধান নোডটি লিঙ্ক করা তালিকার শেষ নোড হবে এবং শেষটি হবে প্রধান নোড।

উদাহরণ

উল্টো লিঙ্কযুক্ত তালিকা উপরের লিঙ্কযুক্ত তালিকা থেকে গঠিত -

85 -> 10 -> 65 -> 32 -> 9 -> NULL

প্রদত্ত লিঙ্কযুক্ত তালিকাটি বিপরীত করতে আমরা তিনটি অতিরিক্ত পয়েন্টার ব্যবহার করব যা প্রক্রিয়ায় থাকবে। পয়েন্টার পূর্ববর্তী, পরে, বর্তমান হবে।

আমরা পূর্ববর্তী এবং পরে NULL শুরু করব এবং লিঙ্কযুক্ত তালিকার শীর্ষে বর্তমান করব।

এর পরে, আমরা পুনরাবৃত্ত করব যতক্ষণ না আমরা প্রারম্ভিক (নন-রিভার্সড লিঙ্কড লিস্ট) এর NULL এ পৌঁছাই। এবং নিম্নলিখিতগুলি করুন -

after = current ->
next current ->
next = previous
previous = current
current = after

এখন লিঙ্ক করা তালিকা উল্টানোর জন্য একটি প্রোগ্রাম তৈরি করা যাক। প্রোগ্রাম তৈরি করার দুটি উপায় হতে পারে, একটি হল পুনরাবৃত্তিমূলক এবং অন্যটি পুনরাবৃত্তিমূলক৷

একটি লিঙ্ক করা তালিকা বিপরীত করার জন্য প্রোগ্রাম (টেইল-রিকারসিভ পদ্ধতি)

উদাহরণ

#include <stdio.h>
struct Node {
   int data;
   struct Node* next;
};
Node* insertNode(int key) {
   Node* temp = new Node;
   temp->data = key;
   temp->next = NULL;
   return temp;
}
void tailRecRevese(Node* current, Node* previous, Node** head){
   if (!current->next) {
      *head = current;
      current->next = previous;
      return;
   }
   Node* next = current->next;
   current->next = previous;
   tailRecRevese(next, current, head);
}
void tailRecReveseLL(Node** head){
   if (!head)
      return;
   tailRecRevese(*head, NULL, head);
}
void printLinkedList(Node* head){
   while (head != NULL) {
      printf("%d ", head->data);
      head = head->next;
   }
   printf("\n");
}
int main(){
   Node* head1 = insertNode(9);
   head1->next = insertNode(32);
   head1->next->next = insertNode(65);
   head1->next->next->next = insertNode(10);
   head1->next->next->next->next = insertNode(85);
   printf("Linked list : \t");
   printLinkedList(head1);
   tailRecReveseLL(&head1);
   printf("Reversed linked list : \t");
   printLinkedList(head1);
   return 0;
}

আউটপুট

Linked list : 9 32 65 10 85
Reversed linked list : 85 10 65 32 9

একটি লিঙ্কযুক্ত তালিকা বিপরীত করার জন্য প্রোগ্রাম (পুনরাবৃত্ত পদ্ধতি)

উদাহরণ

#include <stdio.h>
struct Node {
   int data;
   struct Node* next;
   Node(int data){
      this->data = data;
      next = NULL;
   }
};
struct LinkedList {
   Node* head;
   LinkedList(){
      head = NULL;
   }
   void interReverseLL(){
      Node* current = head;
      Node *prev = NULL, *after = NULL;
      while (current != NULL) {
         after = current->next;
         current->next = prev;
         prev = current;
         current = after;
      }
      head = prev;
   }
   void print() {
      struct Node* temp = head;
      while (temp != NULL) {
         printf("%d ", temp-> data);
         temp = temp->next;
      }
      printf("\n");
   }
   void push(int data){
      Node* temp = new Node(data);
      temp->next = head;
      head = temp;
   }
};
int main() {
   LinkedList linkedlist;
   linkedlist.push(85);
   linkedlist.push(10);
   linkedlist.push(65);
   linkedlist.push(32);
   linkedlist.push(9);
   printf("Linked List : \t");
   linkedlist.print();
   linkedlist.interReverseLL();
   printf("Reverse Linked List : \t");
   linkedlist.print();
   return 0;
}

আউটপুট

Linked list : 9 32 65 10 85
Reversed linked list : 85 10 65 32 9

  1. সি প্রোগ্রাম লিঙ্ক করা তালিকার দৈর্ঘ্য খুঁজে বের করতে

  2. রিভার্স অ্যারে করার জন্য একটি সি প্রোগ্রাম লিখুন

  3. সি প্রোগ্রামে একটি লিঙ্কযুক্ত তালিকার শেষ থেকে n'th নোডের জন্য প্রোগ্রাম

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