Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में लिंक्ड लिस्ट कंपोनेंट्स

मान लीजिए हमने एक सिर दिया है; यह एक लिंक की गई सूची का प्रमुख नोड है जिसमें अद्वितीय पूर्णांक मान होते हैं। अब हमें सूची G भी दी गई है, जो लिंक की गई सूची में मानों का एक उपसमुच्चय है। हमें G में जुड़े हुए घटकों की संख्या ज्ञात करनी है, जहां दो मान जुड़े हुए हैं यदि वे लिंक की गई सूची में लगातार दिखाई देते हैं। तो अगर सूची [0,1,2,3] और जी =[0,1,3] की तरह है, तो आउटपुट 2 होगा, क्योंकि 0 और 1 जुड़े हुए हैं, इसलिए दो सूचियां हैं [0,1] और [3]।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • ret :=0, एक सेट बनाएं, और G के सभी तत्वों को s में डालें
  • झंडा :=झूठा
  • जबकि सिर खाली नहीं है
    • x :=शीर्ष का मान
    • यदि s में x है, तो
      • अगर फ़्लैग गलत है, तो रिट को 1 से बढ़ाएँ
      • झंडा :=सच
    • अन्यथा ध्वज सेट करें:=झूठा
    • सिर:=सिर के आगे
  • रिटर्न रिटर्न

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class ListNode{
   public:
   int val;
   ListNode *next;
   ListNode(int data){
      val = data;
      next = NULL;
   }
};
ListNode *make_list(vector<int> v){
   ListNode *head = new ListNode(v[0]);
   for(int i = 1; i<v.size(); i++){
      ListNode *ptr = head;
      while(ptr->next != NULL){
         ptr = ptr->next;
      }
      ptr->next = new ListNode(v[i]);
   }
   return head;
}
class Solution {
   public:
   int numComponents(ListNode* head, vector<int>& G) {
      int ret = 0;
      set < int > s;
      for(int i = 0; i < G.size(); i++)s.insert(G[i]);
      bool flag = false;
      while(head){
         int x = head->val;
         if(s.count(x)){
            if(!flag) ret++;
            flag = true;
         }else flag = false;
         head = head->next;
      }
      return ret;
   }
};
main(){
   vector<int> v1 = {0,1,2,3};
   vector<int> v2 = {0,1,3};
   ListNode *h1 = make_list(v1);
   Solution ob;
   cout << (ob.numComponents(h1, v2));
}

इनपुट

[0,1,2,3]
[0,1,3]

आउटपुट

2

  1. C++ में 2D मैट्रिक्स से एक लिंक्ड सूची का निर्माण करें

    मान लीजिए कि हमारे पास एक मैट्रिक्स है, हमें इसे पुनरावर्ती दृष्टिकोण का उपयोग करके 2d लिंक्ड सूची में बदलना होगा। सूची में दाएँ और नीचे सूचक होंगे। तो, अगर इनपुट पसंद है 10 20 30 40 50 60 70 80 90 तब आउटपुट होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - फ़ंक्शन को परिभाषित करें

  1. C++ में सर्कुलर लिंक्ड लिस्ट में नोड्स गिनें

    हमें नोड्स के साथ एक सर्कुलर लिंक्ड लिस्ट दी गई है और कार्य एक सर्कुलर लिंक्ड लिस्ट में मौजूद नोड्स की गिनती की गणना करना है। सर्कुलर लिंक्ड लिस्ट लिंक्ड लिस्ट का एक रूपांतर है जिसमें पहला तत्व अंतिम तत्व को इंगित करता है और अंतिम तत्व पहले तत्व को इंगित करता है। सिंगल लिंक्ड लिस्ट और डबल लिंक्ड लि

  1. C++ में बाइनरी ट्री में लिंक की गई सूची

    मान लीजिए कि हमारे पास एक बाइनरी ट्री रूट है और पहले नोड के रूप में एक सिर के साथ एक लिंक्ड सूची है। हमें ट्रू वापस करना होगा यदि लिंक की गई सूची में सिर से शुरू होने वाले सभी तत्व बाइनरी ट्री में जुड़े कुछ डाउनवर्ड पथ से मेल खाते हैं अन्यथा गलत। तो अगर पेड़ जैसा है - और लिंक की गई सूची [1,4,2,6]