এই সমস্যাতে, একটি লিংকড লিস্ট দেওয়া আছে যাতে মান, লিংক পয়েন্টার এবং একটি আربیট্রারি পয়েন্টার আছে। আমাদের কাজ হলো আربیট্রারি পয়েন্টারকে তার ডান পাশের সর্বোচ্চ মানের নোড নির্দেশ করানো।
উদাহরণ:

এখানে লিংকড লিস্টের আربیট্রারি পয়েন্টারগুলো দেখানো হয়েছে যা ডান পাশের সর্বোচ্চ এলিমেন্ট নির্দেশ করছে।
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