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

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

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

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

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

यहां, हम 8 अंक से 12, 12 से 41, 41 से 54, 54 से 76 तक देख सकते हैं जो लिंक्ड सूची के क्रमिक बड़े तत्व हैं।

इस समस्या को हल करने के लिए, हम तत्वों को सॉर्ट करने के लिए मर्ज सॉर्ट एल्गोरिथम का उपयोग करेंगे और सॉर्ट का उपयोग मनमानी पॉइंटर के लिए एक लिंक्ड सूची के रूप में करेंगे।

इसके लिए हम लिंक्ड लिस्ट पर मर्ज सॉर्ट एल्गोरिथम का उपयोग करेंगे, मनमाना पॉइंटर को सॉर्टिंग और लिंक्ड लिस्ट के लिए प्राथमिक पॉइंटर के रूप में मानते हुए, यह समस्या को हल करेगा यानी प्रत्येक मनमाना बिंदु अगले बड़े नोड को इंगित करेगा।

उदाहरण

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

#include <iostream>
using namespace std;
class Node {
   public:
   int data;
   Node* next, *arbit;
};
Node* SortedMerge(Node* a, Node* b);
void FrontBackSplit(Node* source, Node** frontRef, Node** backRef);
void MergeSort(Node** headRef) {
   Node* head = *headRef;
   Node* a, *b;
   if ((head == NULL) || (head->arbit == NULL))
      return;
   FrontBackSplit(head, &a, &b);
   MergeSort(&a);
   MergeSort(&b);
   *headRef = SortedMerge(a, b);
}
Node* SortedMerge(Node* a, Node* b) {
   Node* result = NULL;
   if (a == NULL)
      return (b);
   else if (b == NULL)
      return (a);
   if (a->data <= b->data){
      result = a;
      result->arbit = SortedMerge(a->arbit, b);
   } else {
      result = b;
      result->arbit = SortedMerge(a, b->arbit);
   }
   return (result);
}
void FrontBackSplit(Node* source, Node** frontRef, Node** backRef) {
   Node* fast, *slow;
   if (source == NULL || source->arbit == NULL){
      *frontRef = source;
      *backRef = NULL;
      return;
   }
   slow = source, fast = source->arbit;
   while (fast != NULL){
      fast = fast->arbit;
      if (fast != NULL){
         slow = slow->arbit;
         fast = fast->arbit;
      }
   }
   *frontRef = source;
   *backRef = slow->arbit;
   slow->arbit = NULL;
}
void addNode(Node** head_ref, int new_data) {
   Node* new_node = new Node();
   new_node->data = new_data;
   new_node->next = (*head_ref);
   new_node->arbit = NULL;
   (*head_ref) = new_node;
}
Node* populateArbitraray(Node *head) {
   Node *temp = head;
   while (temp != NULL){
      temp->arbit = temp->next;
      temp = temp->next;
   }
   MergeSort(&head);
   return head;
}
int main() {
   Node* head = NULL;
   addNode(&head, 45);
   addNode(&head, 12);
   addNode(&head, 87);
   addNode(&head, 32);
   Node *ahead = populateArbitraray(head);
   cout << "\t\tArbitrary pointer overlaoded \n Traversing linked List\n";
   cout<<"Using Next Pointer\n";
   while (head!=NULL){
      cout << head->data << ", ";
      head = head->next;
   }
   printf("\nUsing Arbit Pointer\n");
   while (ahead!=NULL){
      cout<<ahead->data<<", ";
      ahead = ahead->arbit;
   }
   return 0;
}

आउटपुट

Arbitrary pointer overlaoded
Traversing linked List
Using Next Pointer
32, 87, 12, 45,
Using Arbit Pointer
12, 32, 45, 87,

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

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

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

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

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

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