একটি সর্টেড ডাবলি লিংকড লিস্ট দেওয়া আছে যাতে ইন্টিজার ভ্যালু আছে। লক্ষ্য হলো যেসব ট্রিপলেটের গুণফল দেওয়া x-এর সমান সেটি বের করা। যদি ইনপুট লিংকড লিস্ট 3-4-1-2 এবং x = 6 হয়, তবে কাউন্ট হবে ১ (ট্রিপলেট (৩,১,২))।

উদাহরণ ১
ইনপুট
linked list: [ 3-4-13-5-10-10-0 ] x=20
আউটপুট
সর্টেড ডাবলি লিংকড লিস্টে যোগফল x হয় এমন ট্রিপলেটের সংখ্যা: 2
ব্যাখ্যা
ট্রিপলেটগুলো: (3,4,13) এবং (10,10,0)
উদাহরণ ২
ইনপুট
linked list: [ 4-3-1-5-2-4-2 ] x=8
আউটপুট
সর্টেড ডাবলি লিংকড লিস্টে যোগফল x হয় 그런 ট্রিপলেটের সংখ্যা: 6
ব্যাখ্যা
ট্রিপলেটগুলো: (4,3,1), (1,5,2), (3,1,4), (1,5,2), (4,2,2) এবং (2,4,2)
প্রয়োগ করা পদ্ধতি
এই পদ্ধতিতে:
লিংকড লিস্ট নোড হিসেবে
structনেওয়া হয় যাতেint dataপার্ট এবং সেলফ-রেফারেন্সিয়ালnextওpreviousপয়েন্টার থাকে।insert_node(struct block** head, int data)ফাংশনটি হেডে নোড যোগ করে।Product_x(struct block* head, int x)ফাংশনটি ডাবলি লিংকড লিস্টের হেড পয়েন্টার এবং ইন্টিজারxনিয়ে ডাটা পার্টের যোগফলxহয় এমন ট্রিপলেটের কাউন্ট রিটার্ন করে।আরম্ভিক কাউন্ট ০ রাখুন।
তিনটি পয়েন্টার
temp_1,temp_2এবংtemp_3নিনstruct blockটাইপের।temp_1হেড থেকে,temp_2temp_1-এর नेक्सট,temp_3temp_2-এর নেক্সট থেকে শুরু করুন।এই পয়েন্টারগুলো দিয়ে লাস্ট নোড পর্যন্ত ট্রুভার্স করুন।
যদি বর্তমান তিনটি পয়েন্টারের ডাটা পার্টের যোগফল
xহয় ((temp_1->data + temp_2->data + temp_3->data) == x), তবে কাউন্ট বাড়ান।শেষে ট্রিপলেটের সংখ্যা
count-এ থাকবে।countরিটার্ন করুন ফলাফল হিসেবে।
উদাহরণ কোড
#include <iostream>
using namespace std;
struct block {
int data;
struct block *next, *prev;
};
void insert_node(struct block** head, int data) {
struct block* ptr = new block();
ptr->data = data;
ptr->next = NULL;
ptr->prev = NULL;
if ((*head) == NULL) {
(*head) = ptr;
} else {
ptr->next = *head;
(*head)->prev = ptr;
(*head) = ptr;
}
}
int sum_x(struct block* head, int x) {
int count = 0;
struct block *temp_1, *temp_2, *temp_3;
for (temp_1 = head; temp_1 != NULL; temp_1 = temp_1->next) {
for (temp_2 = temp_1->next; temp_2 != NULL; temp_2 = temp_2->next) {
for (temp_3 = temp_2->next; temp_3 != NULL; temp_3 = temp_3->next) {
if ((temp_1->data + temp_2->data + temp_3->data) == x) {
count++;
}
}
}
}
return count;
}
int main() {
struct block* head = NULL;
insert_node(&head, 200);
insert_node(&head, 100);
insert_node(&head, 16);
insert_node(&head, 14);
insert_node(&head, 10);
insert_node(&head, 10);
insert_node(&head, 2);
int x = 22;
cout << "সর্টেড ডাবলি লিংকড লিস্টে যোগফল x হয় এমন ট্রিপলেটের সংখ্যা: " << sum_x(head, x);
return 0;
}
আউটপুট
উপরোক্ত কোডটি রান করলে নিচের আউটপুটটি আসবে:
সর্টেড ডাবলি লিংকড লিস্টে যোগফল x হয় এমন ট্রিপলেটের সংখ্যা: 1