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

सी ++ में लिंक्ड लिस्ट रैंडम नोड


मान लीजिए कि हमारे पास एक सिंगल लिंक्ड लिस्ट है, हमें लिंक्ड लिस्ट से एक रैंडम नोड का मान खोजना होगा। यहां प्रत्येक नोड के चुने जाने की संभावना समान होनी चाहिए। तो उदाहरण के लिए, यदि सूची [1,2,3] है, तो यह 1, 2, और 3 श्रेणी में यादृच्छिक नोड लौटा सकती है।

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

  • getRandom() विधि में, निम्न कार्य करें -

  • रिट:=-1, लेन:=1, वी:=एक्स

  • जबकि v शून्य नहीं है

    • यदि रैंड () लेन से विभाज्य है, तो रिट :=v का मान

    • लेन को 1 से बढ़ाएं

    • v :=v के आगे

  • वापसी रिट

उदाहरण(C++)

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

#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:
   ListNode* x;
   Solution(ListNode* head) {
      srand(time(NULL));
      x = head;
   }
   int getRandom() {
      int ret = -1;
      int len = 1;
      ListNode* v = x;
      while(v){
         if(rand() % len == 0){
            ret = v->val;
         }
         len++;
         v = v->next;
      }
      return ret;
   }
};
main(){
   vector<int> v = {1,7,4,9,2,5};
   ListNode *head = make_list(v);
   Solution ob(head);
   cout << (ob.getRandom());
}

इनपुट

Initialize list with [1,7,4,9,2,5]
Call getRandom() to get random nodes

आउटपुट

4
9
1

  1. सी ++ में एक लिंक्ड सूची को समतल करना

    इस समस्या में, हमें दो पॉइंटर नोड्स वाली लिंक्ड लिस्ट दी जाती है, दाएं और नीचे। दायां नोड मुख्य लिंक्ड सूची सूचक है। डाउन नोड उस नोड से शुरू होने वाली सेकेंडरी लिंक्ड लिस्ट के लिए है। सभी लिंक की गई सूचियां क्रमबद्ध हैं। हमारा काम एक लिंक की गई सूची को समतल करने के लिए एक प्रोग्राम बनाना ह

  1. C++ में एक बहुस्तरीय लिंक्ड सूची को समतल करें

    इस समस्या में, हमें एक बहुस्तरीय लिंक्ड सूची दी गई है। हमारा काम एक बहुस्तरीय लिंक्ड सूची को समतल करने के लिए एक प्रोग्राम बनाना है। फ़्लैटनिंग ऑपरेशन इस तरह से किया जाता है कि पहले स्तर के नोड्स पहले लिंक की गई सूची में होंगे और फिर दूसरे स्तर के नोड होंगे। बहुस्तरीय लिंक की गई सूची एक बहु-आयामी

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

    सर्कुलर सिंगल लिंक्ड लिस्ट एक प्रकार की डेटा संरचना है जो नोड्स से बनी होती है जो सेल्फ रेफरेंशियल स्ट्रक्चर का उपयोग करके बनाई जाती है। इनमें से प्रत्येक नोड में दो भाग होते हैं, अर्थात् डेटा और अगली सूची नोड का संदर्भ। संपूर्ण लिंक की गई सूची तक पहुँचने के लिए केवल पहली सूची नोड के संदर्भ की आवश्