ในโจทย์นี้ เราได้รับ linked list งานของเราคือสร้างฟังก์ชันที่จะสามารถนับจำนวนครั้งที่จำนวนที่กำหนดปรากฏใน linked list ได้
ตัวอย่าง
อินพุต
Linked list = 10 -> 50 -> 10 -> 20 -> 100 -> 10, int = 10
เอาต์พุต
3
คำอธิบาย - จำนวน 10 ปรากฏ 3 ครั้งใน linked list
วิธีแก้ปัญหานี้ง่ายมาก แค่ traverse linked list และเพิ่มตัวนับเมื่อค่าของโหนดปัจจุบันเท่ากับจำนวนที่กำหนด
การวนลูปผ่านโหนดของ linked list สามารถทำได้โดยใช้ iteration และ recursion ทั้งคู่ เราจะแสดงทั้งสองวิธี
โปรแกรมแสดงโซลูชันแบบ Iteration
#include <iostream>
using namespace std;
class Node {
public:
int data;
Node* next;
};
void push(Node** head_ref, int new_data) {
Node* new_node = new Node();
new_node->data = new_data;
new_node->next = (*head_ref);
(*head_ref) = new_node;
}
int countInt(Node* head, int search_for) {
Node* current = head;
int intCount = 0;
while (current != NULL) {
if (current->data == search_for)
intCount++;
current = current->next;
}
return intCount;
}
int main() {
Node* head = NULL;
push(&head, 10);
push(&head, 40);
push(&head, 10);
push(&head, 50);
push(&head, 20);
push(&head, 90);
push(&head, 10);
cout << "The count of 10 in the linked list is " << countInt(head, 10);
return 0;
}
ผลลัพธ์
The count of 10 in the linked list is 3
โปรแกรมแสดงโซลูชันแบบ Recursion
#include <iostream>
using namespace std;
int intCount = 0;
class Node {
public:
int data;
Node* next;
};
void push(Node** head_ref, int new_data) {
Node* new_node = new Node();
new_node->data = new_data;
new_node->next = (*head_ref);
(*head_ref) = new_node;
}
int countInt(struct Node* head, int key) {
if (head == NULL)
return intCount;
if (head->data == key)
intCount++;
return countInt(head->next, key);
}
int main() {
Node* head = NULL;
push(&head, 10);
push(&head, 40);
push(&head, 10);
push(&head, 50);
push(&head, 20);
push(&head, 90);
push(&head, 10);
cout << "The count of 10 in the linked list is " << countInt(head, 10);
return 0;
}
ผลลัพธ์
The count of 10 in the linked list is 3