Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> 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. सी++ में लिंक की गई सूची में मॉड्यूलर नोड खोजें

    इस समस्या में, हमें एक एकल लिंक की गई सूची LL और एक संख्या k दी गई है। हमारा काम एक लिंक की गई सूची में मॉड्यूलर नोड ढूंढना है। समस्या का विवरण - हमें लिंक की गई सूची के अंतिम नोड को खोजने की जरूरत है जिसके लिए सूचकांक k से विभाज्य है यानी i % k ==0. समस्या को समझने के लिए एक उदाहरण लेते हैं, इनप

  1. C++ में किसी श्रेणी के लापता तत्वों का पता लगाएं

    इस समस्या में, हमें आकार n का एक सरणी arr[] दिया जाता है और प्रारंभ और समाप्ति सीमा को दर्शाता है। हमारा काम किसी श्रेणी के लापता तत्वों को ढूंढना है। समस्या का विवरण - हम उस श्रेणी के तत्वों का पता लगाएंगे जो सीमा में मौजूद नहीं हैं। समस्या को समझने के लिए एक उदाहरण लेते हैं, इनपुट arr[] = {4, 6

  1. C++ में दो लिंक्ड सूचियों का प्रतिच्छेदन

    एक लिंक्ड सूची एक रैखिक डेटा संरचना है जिसमें प्रत्येक नोड में दो ब्लॉक होते हैं जैसे कि एक ब्लॉक में नोड का मान या डेटा होता है और दूसरे ब्लॉक में अगले फ़ील्ड का पता होता है। आइए मान लें कि हमारे पास एक लिंक्ड सूची है जैसे कि प्रत्येक नोड में एक यादृच्छिक सूचक होता है जो सूची में अन्य नोड्स को इंग