ในปัญหานี้ เราได้รับรายการเชื่อมโยง งานของเราคือ หาผลรวมของโหนดคู่และคี่ในรายการที่เชื่อมโยง .
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
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 − ส่งคืนผลรวมคี่และผลรวมคู่
ตัวอย่าง
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
#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