ধরুন আমাদের তিনটি লিঙ্ক করা তালিকা আছে। আমাদের এই তিনটি লিঙ্কযুক্ত তালিকায় উপস্থিত সমস্ত সাধারণ উপাদানগুলি খুঁজে বের করতে হবে। ধরুন এই তালিকাগুলি হল [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