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

C++ में लिंक की गई सूची में सबसे बड़े मान दाईं ओर के नोड के लिए पॉइंट आर्बिट पॉइंटर

इस समस्या में, हमें एक मूल्य, लिंक सूचक और एक मनमाना सूचक के साथ एक लिंक्ड सूची दी जाती है। हमारा काम सबसे बड़ा मान इंगित करने के लिए मनमाना सूचक बिंदु बनाना है जो लिंक की गई सूची में इसके दाईं ओर है।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

C++ में लिंक की गई सूची में सबसे बड़े मान दाईं ओर के नोड के लिए पॉइंट आर्बिट पॉइंटर

यहां, हम लिंक की गई सूची के निम्नलिखित मनमाने संकेत देख सकते हैं, जो लिंक की गई सूची के दाईं ओर सबसे बड़े तत्वों की ओर इशारा करते हैं।

12 -> 76, 76 -> 54, 54 -> 8, 8 -> 41

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

उदाहरण

हमारे समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम,

#include<bits/stdc++.h>
using namespace std;
struct Node{
   int data;
   Node* next, *arbitrary;
};
Node* reverseList(Node *head){
   Node *prev = NULL, *current = head, *next;
   while (current != NULL){
      next = current->next;
      current->next = prev;
      prev = current;
      current = next;
   }
   return prev;
}
Node* populateArbitraray(Node *head){
   head = reverseList(head);
   Node *max = head;
   Node *temp = head->next;
   while (temp != NULL){
      temp->arbitrary = max;
      if (max->data < temp->data)
         max = temp;
      temp = temp->next;
   }
   return reverseList(head);
}
Node *insertNode(int data) {
   Node *new_node = new Node;
   new_node->data = data;
   new_node->next = NULL;
   return new_node;
}
int main() {
   Node *head = insertNode(12);
   head->next = insertNode(76);
   head->next->next = insertNode(54);
   head->next->next->next = insertNode(8);
   head->next->next->next->next = insertNode(41);
   head = populateArbitraray(head);
   printf("Linked List with Arbitrary Pointer: \n");
   while (head!=NULL){
      cout<<head->data<<"->";
      if (head->next)
         cout<<head->next->data;
      else
         cout<<"NULL";
      cout<<": "<<head->data<<"->";
      if (head->arbitrary)
         cout<<head->arbitrary->data;
      else
         cout<<"NULL";
      cout << endl;
      head = head->next;
   }
   return 0;
}

आउटपुट

Linked List with Arbitrary Pointer:
12->76: 12->76
76->54: 76->54
54->8: 54->41
8->41: 8->41
41->NULL: 41->NULL

  1. C++ में दी गई कुंजी का अगला दायां नोड खोजें

    इस समस्या में, हमें एक बाइनरी ट्री बीटी और एक प्रमुख मूल्य दिया जाता है। हमारा काम किसी दिए गए कुंजी का अगला दायां नोड ढूंढना है। बाइनरी ट्री एक विशेष डेटा संरचना है जिसका उपयोग डेटा संग्रहण उद्देश्यों के लिए किया जाता है। समस्या को समझने के लिए एक उदाहरण लेते हैं, इनपुट key = 4 आउटपुट 5 स्पष्ट

  1. C++ में रैंडम पॉइंटर के साथ कॉपी लिस्ट

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

  1. सी ++ में एक मनमाना सूचक के साथ एक लिंक्ड सूची में अगले उच्च मूल्य नोड को इंगित करें

    इस समस्या में, हमें एक मूल्य, लिंक सूचक और एक मनमाना सूचक के साथ एक लिंक्ड सूची दी जाती है। हमारा काम सूची में अगले बड़े मूल्य को इंगित करने के लिए मनमाना सूचक बिंदु बनाना है। समस्या को समझने के लिए एक उदाहरण लेते हैं, यहां, हम 8 अंक से 12, 12 से 41, 41 से 54, 54 से 76 तक देख सकते हैं जो लिंक्ड