এই সমস্যায়, আমাদের একটি লিংকড লিস্ট দেওয়া আছে। আমাদের কাজ হল লিংকড লিস্টে জোড় ও বিজোড় নোডের যোগফল খুঁজে বের করা।
উদাহরণ
সমস্যাটি বুঝতে একটি উদাহরণ নিই:
ইনপুট : লিংকড লিস্ট : 3 → 2 → 5 → 7 → 1 → 9 আউটপুট : evenSum = 2 ; oddSum = 25
ব্যাখ্যা:
evenSum = 2 oddSum = 3 + 5 + 7 + 1 + 9 = 25
সমাধানের পদ্ধতি
এই সমস্যা সমাধানের একটি সহজ পদ্ধতি হল লিংকড লিস্টটি ট্রাভার্স করা এবং প্রতিটি নোডের মান জোড় কি বিজোড় তা যাচাই করে তাদের সংশ্লিষ্ট যোগফলে যোগ করা।
অ্যালগরিদম
স্টেপ ১ − লিংকড লিস্টটি ট্রাভার্স করুন।
স্টেপ ১.১ − যদি বর্তমান নোডের মান জোড় হয়, তবে তা evenSum-এ যোগ করুন।
স্টেপ ১.২ − যদি বর্তমান নোডের মান বিজোড় হয়, তবে তা oddSum-এ যোগ করুন।
স্টেপ ২ − oddSum এবং evenSum রিটার্ন করুন।
উদাহরণ প্রোগ্রাম
আমাদের সমাধানের কাজকাণ্ড ব্যাখ্যা করার প্রোগ্রাম:
#include <iostream>
using namespace std;
struct Node {
int data;
Node* next;
};
void insertNode(Node** root, int item) {
Node *ptr = *root, *temp = new Node;
temp->data = item;
temp->next = NULL;
if (*root == NULL)
*root = temp;
else {
while (ptr->next != NULL)
ptr = ptr->next;
ptr->next = temp;
}
}
bool isEven(int a) {
return (a % 2 == 0);
}
void findEvenAndOddSum(Node* root) {
int oddSum = 0, evenSum = 0;
Node* node = root;
while (node != NULL) {
if (isEven(node->data))
evenSum += node->data;
else
oddSum += node->data;
node = node->next;
}
cout << "Sum of nodes with even value is " << evenSum << endl;
cout << "Sum of nodes with odd value is " << oddSum;
}
int main() {
Node* root = NULL;
insertNode(&root, 3);
insertNode(&root, 2);
insertNode(&root, 5);
insertNode(&root, 7);
insertNode(&root, 1);
insertNode(&root, 9);
insertNode(&root, 6);
findEvenAndOddSum(root);
return 0;
}
আউটপুট
Sum of nodes with even value is 8 Sum of nodes with odd value is 25