ในปัญหานี้ เราได้รับข้อมูลเป็น Linked List งานของเราคือ การหาผลรวมของโหนดที่มีค่าเป็นเลขคู่และเลขคี่ ใน Linked List นั้น
ตัวอย่างเพื่อความเข้าใจ
Input : linked list : 3 → 2 → 5 → 7 → 1 → 9 Output : evenSum = 2 ; oddSum = 25
คำอธิบาย
evenSum = 2 oddSum = 3 + 5 + 7 + 1 + 9 = 25
แนวทางแก้ปัญหา
วิธีการที่ง่ายที่สุดคือการเดินผ่าน (traverse) Linked List และตรวจสอบค่าของแต่ละโหนดว่าเป็นเลขคู่หรือเลขคี่ จากนั้นนำไปบวกในตัวแปรผลรวมที่เกี่ยวข้อง
อัลกอริทึม
ขั้นตอนที่ 1 − เดินผ่าน Linked List ทั้งหมด
ขั้นตอนที่ 1.1 − หากค่าของโหนดปัจจุบันเป็นเลขคู่ ให้บวกเข้าไปใน
evenSumขั้นตอนที่ 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 == 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