এই সমস্যায়, আমরা একটি লিঙ্ক তালিকা দেওয়া হয়. আমাদের কাজ হল একটি লিঙ্ক করা তালিকায় জোড় এবং বিজোড় নোডের যোগফল খুঁজে বের করা .
সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,
Input : linked list : 3 -> 2 -> 5 -> 7 -> 1 -> 9 Output : evenSum = 2 ; oddSum = 25
ব্যাখ্যা −
evenSum = 2 oddSum = 3 + 5 + 7 + 1 + 9 = 25
সমাধান পদ্ধতি
সমস্যা সমাধানের একটি সহজ পন্থা হল লিঙ্ক করা তালিকাকে অতিক্রম করা এবং জোড় বা বিজোড় মান পরীক্ষা করা এবং তাদের নিজ নিজ যোগফলের সাথে যোগ করা।
অ্যালগরিদম
-
ধাপ 1 - লিঙ্ক করা তালিকা অতিক্রম করুন।
-
পদক্ষেপ 1.1৷ − যদি বর্তমান নোডের মান জোড় হয়, তাহলে এটাকে ইভেনসুমে যোগ করুন।
-
পদক্ষেপ 1.2৷ − যদি বর্তমান নোডের মান বিজোড় হয়, তাহলে এটিকে oddSum-এ যোগ করুন।
-
-
ধাপ 2 − 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);
}
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 25 Sum of nodes with odd value is 8