কম্পিউটার টিউটোরিয়াল

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++)

  2. বাইনারি ট্রিতে দেওয়া কীর নেক্সট রাইট নোড খুঁজে বের করা C++-এ

  3. C++-এ র‍্যান্ডম পয়েন্টারসহ লিঙ্কড লিস্টের ডিপ কপি (Deep Copy)

  4. C++-এ আربيট্রারি পয়েন্টার দিয়ে লিংকড লিস্টে পরবর্তী বড় মানযুক্ত নোড নির্দেশ করা