কম্পিউটার

C++ এ একটি লিঙ্ক করা তালিকায় আর্বিট পয়েন্টারকে সর্বাধিক মানের ডান পাশের নোডে নির্দেশ করুন


এই সমস্যায়, আমাদের একটি মান, লিঙ্ক পয়েন্টার এবং একটি নির্বিচারে পয়েন্টার সহ একটি লিঙ্কযুক্ত তালিকা দেওয়া হয়েছে। আমাদের কাজ হল নির্বিচারে পয়েন্টার পয়েন্ট করা যাতে লিঙ্ক করা তালিকার ডানদিকে থাকা সবচেয়ে বড় মানটিকে নির্দেশ করা হয়।

সমস্যাটি বোঝার জন্য একটি উদাহরণ দেওয়া যাক,

C++ এ একটি লিঙ্ক করা তালিকায় আর্বিট পয়েন্টারকে সর্বাধিক মানের ডান পাশের নোডে নির্দেশ করুন

এখানে, আমরা লিঙ্ক করা তালিকার নিম্নোক্ত নির্বিচারে পয়েন্টারগুলি দেখতে পাচ্ছি, যা লিঙ্ক করা তালিকার ডান দিকের সবচেয়ে বড় উপাদানগুলিকে নির্দেশ করে৷

12 -> 76, 76 -> 54, 54 -> 8, 8 -> 41

এই সমস্যাটি সমাধান করার জন্য, আমাদের একটি নোডের ডানদিকে সবচেয়ে বড় উপাদানটি খুঁজে বের করতে হবে। এর জন্য আমরা লিঙ্ক করা তালিকাটিকে বিপরীত দিকে ট্র্যাভার্সাল করব এবং সমস্ত সেরা উপাদানগুলি খুঁজে বের করতে শুরু করব এবং তারপরে প্রতিটি নোডে আমাদের রক্ষণাবেক্ষণ করা সবচেয়ে বড় নোডের নির্বিচারে পয়েন্ট তৈরি করবে৷

উদাহরণ

আমাদের সমাধানের বাস্তবায়ন দেখানোর জন্য প্রোগ্রাম,

#include<bits/stdc++.h>
using namespace std;
struct Node{
   int data;
   Node* next, *arbitrary;
};
Node* reverseList(Node *head){
   Node *prev = NULL, *current = head, *next;
   while (current != NULL){
      next = current->next;
      current->next = prev;
      prev = current;
      current = next;
   }
   return prev;
}
Node* populateArbitraray(Node *head){
   head = reverseList(head);
   Node *max = head;
   Node *temp = head->next;
   while (temp != NULL){
      temp->arbitrary = max;
      if (max->data < temp->data)
         max = temp;
      temp = temp->next;
   }
   return reverseList(head);
}
Node *insertNode(int data) {
   Node *new_node = new Node;
   new_node->data = data;
   new_node->next = NULL;
   return new_node;
}
int main() {
   Node *head = insertNode(12);
   head->next = insertNode(76);
   head->next->next = insertNode(54);
   head->next->next->next = insertNode(8);
   head->next->next->next->next = insertNode(41);
   head = populateArbitraray(head);
   printf("Linked List with Arbitrary Pointer: \n");
   while (head!=NULL){
      cout<<head->data<<"->";
      if (head->next)
         cout<<head->next->data;
      else
         cout<<"NULL";
      cout<<": "<<head->data<<"->";
      if (head->arbitrary)
         cout<<head->arbitrary->data;
      else
         cout<<"NULL";
      cout << endl;
      head = head->next;
   }
   return 0;
}

আউটপুট

Linked List with Arbitrary Pointer:
12->76: 12->76
76->54: 76->54
54->8: 54->41
8->41: 8->41
41->NULL: 41->NULL

  1. C++ এ বহুস্তরের লিঙ্কযুক্ত তালিকা সমতল করুন

  2. C++ এ প্রদত্ত কী-এর পরবর্তী ডানদিকের নোড খুঁজুন

  3. C++ এ এলোমেলো পয়েন্টার সহ তালিকা অনুলিপি করুন

  4. C++ এ একটি নির্বিচারে পয়েন্টার সহ একটি লিঙ্ক করা তালিকার পরবর্তী উচ্চতর মানের নোডের দিকে নির্দেশ করুন