কম্পিউটার টিউটোরিয়াল

তিনটি লিংকড লিস্টে সাধারণ উপাদানগুলো খুঁজে বের করা C++-তে


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

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

  • একটি খালি হ্যাশ টেবিল তৈরি করুন, এবং প্রথম লিস্টের প্রতিটি উপাদান 통해서 যান, এবং উপাদানগুলো ইনসার্ট করুন, এবং ফ্রিকোয়েন্সি ১ চিহ্নিত করুন
  • দ্বিতীয় লিংকড লিস্টের মাধ্যমে ইটারেট করুন, যদি উপাদানের বর্তমান ফ্রিকোয়েন্সি ১ হয়, তবে এটিকে ২ করুন
  • তৃতীয় লিংকড লিস্টের মাধ্যমে ইটারেট করুন, যদি উপাদানের বর্তমান ফ্রিকোয়েন্সি ২ হয়, তবে এটিকে ৩ করুন
  • এখন প্রথম লিস্টের মাধ্যমে আবার ইটারেট করুন যেন উপাদানগুলোর ফ্রিকোয়েন্সি চেক করা যায়। যদি কোনো উপাদানের ফ্রিকোয়েন্সি ৩ হয়, তবে সেই উপাদানটি প্রিন্ট করুন, এবং পরবর্তীটিতে যান

উদাহরণ

#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++-এ দুটি লিঙ্কড লিস্টের ইন্টারসেকশন পয়েন্ট খুঁজে বের করা