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("मनमाना पॉइंटर के साथ लिंक्ड लिस्ट: \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;
}

आउटपुट

मनमाना पॉइंटर के साथ लिंक्ड लिस्ट:
12->76: 12->76
76->54: 76->54
54->8: 54->41
8->41: 8->41
41->NULL: 41->NULL
  1. C++ में बाइनरी ट्री में दी गई कुंजी का अगला दायां नोड ढूंढना C++ में बाइनरी ट्री में दी गई कुंजी का अगला दायां नोड ढूंढना

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

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

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

  1. C++ में लिंक्ड लिस्ट में मनमाना पॉइंटर को अगले उच्च मान वाले नोड पर इंगित करना C++ में लिंक्ड लिस्ट में मनमाना पॉइंटर को अगले उच्च मान वाले नोड पर इंगित करना

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