কম্পিউটার

C++ এ তিনটি লিঙ্কযুক্ত তালিকায় সাধারণ উপাদান খুঁজুন


ধরুন আমাদের তিনটি লিঙ্ক করা তালিকা আছে। আমাদের এই তিনটি লিঙ্কযুক্ত তালিকায় উপস্থিত সমস্ত সাধারণ উপাদানগুলি খুঁজে বের করতে হবে। ধরুন এই তালিকাগুলি হল [10, 12, 15, 20, 25], [10, 12, 13, 15] এবং [10, 12, 15, 24, 25, 26], তাহলে এই তিনটি তালিকার সাধারণ উপাদানগুলি হল 10 , 12 এবং 15।

আমরা এই সমস্যা সমাধানের জন্য হ্যাশিং কৌশল ব্যবহার করব। এটি সমাধান করার জন্য, আমাদের এই পদক্ষেপগুলি অনুসরণ করতে হবে -

  • একটি খালি হ্যাশ টেবিল তৈরি করুন এবং প্রথম টেবিলের প্রতিটি উপাদানের মধ্য দিয়ে যান এবং উপাদানগুলি সন্নিবেশ করুন এবং ফ্রিকোয়েন্সিটিকে 1 হিসাবে চিহ্নিত করুন

  • দ্বিতীয় লিঙ্কযুক্ত তালিকার মাধ্যমে পুনরাবৃত্তি করুন, তারপর যদি উপাদানটির জন্য বর্তমান ফ্রিকোয়েন্সি 1 হয়, তাহলে এটিকে 2 করুন

  • তৃতীয় লিঙ্কযুক্ত তালিকার মাধ্যমে পুনরাবৃত্তি করুন, তারপর যদি উপাদানটির জন্য বর্তমান ফ্রিকোয়েন্সি 2 হয়, তাহলে এটিকে 3 করুন

  • এখন উপাদানগুলির ফ্রিকোয়েন্সি পরীক্ষা করতে আবার প্রথম তালিকার মাধ্যমে পুনরাবৃত্তি করুন, যদি এমন কিছু উপাদান থাকে যার ফ্রিকোয়েন্সি 3 হয়, তাহলে সেই উপাদানটি প্রিন্ট করুন এবং পরবর্তীতে যান

উদাহরণ

#include<iostream>
#include<cmath>
#include<unordered_map>
using namespace std;
class Node {
   public:
      int data;
   Node* next;
};
void addNode(Node** start, int data) {
   Node* newNode = new Node;
   newNode->data = data;
   newNode->next = (*start);
   (*start) = newNode;
}
void findCommonValues(Node* list1, Node* list2, Node* list3) {
   unordered_map<int, int> hash;
   Node* p = list1;
   while (p != NULL) {
      hash[p->data] = 1;
      p = p->next;
   }
   Node* q = list2;
   while (q != NULL) {
      if (hash.find(q->data) != hash.end()) hash[q->data] = 2;
         q = q->next;
   }
   Node* r = list3;
   while (r != NULL) {
      if (hash.find(r->data) != hash.end() && hash[r->data] == 2)
         hash[r->data] = 3;
      r = r->next;
   }
   for (auto x : hash) {
      if (x.second == 3)
         cout << x.first << " ";
   }
}
int main() {
   Node* list1 = NULL;
   addNode(&list1, 10);
   addNode(&list1, 12);
   addNode(&list1, 15);
   addNode(&list1, 20);
   addNode(&list1, 25);
   Node* list2 = NULL;
   addNode(&list2, 10);
   addNode(&list2, 12);
   addNode(&list2, 13);
   addNode(&list2, 15);
   Node* list3 = NULL;
   addNode(&list3, 10);
   addNode(&list3, 12);
   addNode(&list3, 15);
   addNode(&list3, 24);
   addNode(&list3, 25);
   addNode(&list3, 26);
   cout << "Common elements are: ";
   findCommonValues(list1, list2, list3);
}

আউটপুট

Common elements are: 10 12 15

  1. C++ এ অবস্থানগত উপাদানের সংখ্যা খুঁজুন

  2. C++ এ একটি লিঙ্ক করা তালিকায় মডুলার নোড খুঁজুন

  3. C++ এ একটি পরিসরের অনুপস্থিত উপাদান খুঁজুন

  4. C++ এ দুটি লিঙ্ক করা তালিকার ছেদ