লিংকড লিস্ট হলো একটি লিনিয়ার ডেটা স্ট্রাকচার যেখানে এলিমেন্টগুলো পয়েন্টার দিয়ে লিঙ্ক করা থাকে। প্রতিটি নোডে একটি ডেটা পার্ট এবং পরের নোডের পয়েন্টার থাকে। এলিমেন্টগুলো মেমরিতে নন-কন্টিগিউাস লোকেশন নিতে পারে।
আমাদের একটি সিংলি লিংকড লিস্ট দেওয়া আছে যার প্রতিটি নোডে ডেটা এবং পরের নোডের লিংক আছে। আরেকটি ইনপুট হলো সংখ্যা K। টাস্ক হলো লিংকড লিস্ট থেকে সেই এলিমেন্টগুলো খুঁজে বের করা যা K দিয়ে বিভাজ্য, এবং তাদের মধ্যে সর্বোচ্চ ও ন্যূনতম মান বের করা।
ইনপুট
SList: 5->2->10->12->3->20->7, K=5
আউটপুট
Maximum element divisible by K: 20 Minimum element divisible by K: 5
ব্যাখ্যা − হেড নোড থেকে ট্রাভার্স করে প্রতিটি নোডের ডেটা K দিয়ে ভাগ করে রিমেইন্ডার ০ কিনা চেক করুন। ৫, ১০, ২০ — এই তিনটি ৫ দিয়ে বিভাজ্য। 그중 সর্বনিম্ন ৫ এবং সর্বোচ্চ ২০।
ইনপুট
SList: 12->2->5->18->3->144->7, K=4
আউটপুট
Maximum element divisible by K: 144 Minimum element divisible by K: 12
প্রোগ্রামে ব্যবহৃত পদ্ধতি
- একটি লিংকড লিস্ট নোড ক্লাস তৈরি করুন (
SLLnode) যেটিতেinfoএবংnextপয়েন্টার থাকে। - একটি লিংকড লিস্ট ক্লাস তৈরি করুন (
SLList) যেটিতেheadপয়েন্টার থাকে। addtohead(int)ফাংশন দিয়ে লিস্টে নোড যোগ করুন।Divisible(SLLnode*, int)ফাংশন কল করুন যা হেড নোড এবং K নেয়।- ফাংশনের ভিতরে
maxDএবংminDভ্যারিয়েবল দিয়ে সর্বোচ্চ ও ন্যূনতম মান ট্র্যাক করুন।maxD-1 এবংminD৯৯৯৯ দিয়ে ইনিশিয়ালাইজ করুন। - হেড নোড থেকে লিস্ট ট্রাভার্স করুন। প্রতিটি নোডের
infoK দিয়ে বিভাজ্য কিনা চেক করুন। যদি হয়, তবেmaxDওminDআপডেট করুন। - শেষে
maxDএবংminDপ্রিন্ট করুন।
উদাহরণ
#include <iostream>
using namespace std;
class SLLnode {
public:
int info;
SLLnode* next;
SLLnode(int e, SLLnode* ptr = nullptr) : info(e), next(ptr) {}
};
class SLList {
public:
SLLnode* head;
SLList() : head(nullptr) {}
void addtohead(int el) { head = new SLLnode(el, head); }
};
void Divisible(SLLnode* head, int K) {
int minD = 9999;
int maxD = -1;
SLLnode* start = head;
for (; start != nullptr; start = start->next) {
if ((start->info < minD) && (start->info % K == 0))
minD = start->info;
if ((start->info > maxD) && (start->info % K == 0))
maxD = start->info;
}
cout << "Max Element divisible by K: " << maxD << endl;
cout << "Min Element divisible by K: " << minD;
}
int main() {
SLList LIST;
LIST.addtohead(50);
LIST.addtohead(21);
LIST.addtohead(32);
LIST.addtohead(45);
LIST.addtohead(11);
LIST.addtohead(23);
LIST.addtohead(90);
LIST.addtohead(56);
int K = 5;
Divisible(LIST.head, K);
return 0;
}
আউটপুট
Max Element divisible by K: 90 Min Element divisible by K: 45