ให้เชื่อมโยงรายการเดียว ภารกิจคือการค้นหาองค์ประกอบเฉพาะในรายการที่เชื่อมโยง หากพบองค์ประกอบ ให้พิมพ์ "ปัจจุบัน" มิฉะนั้น "ไม่มี" ตัวอย่างเช่น
อินพุต-1 −
1→ 2→ 3→ 4→ 5→ 6
กำลังค้นหา '7'
ผลผลิต −
Not Present
คำอธิบาย − ในรายการเชื่อมโยงเดี่ยวที่กำหนด ไม่มีองค์ประกอบ '7' ดังนั้น เราจะส่งคืนผลลัพธ์เป็น "ไม่แสดง"
อินพุต-2 −
1→ 2→ 3→ 4→ 5
กำลังค้นหา '2'
ผลผลิต −
Present
คำอธิบาย − เนื่องจากในรายการเชื่อมโยงแบบเดี่ยวที่กำหนดองค์ประกอบ '2' จึงมีอยู่ ดังนั้นเราจะส่งคืนผลลัพธ์เป็น "ปัจจุบัน"
แนวทางการแก้ปัญหานี้
มีสองวิธีในการค้นหาองค์ประกอบเฉพาะในรายการเชื่อมโยงที่กำหนด เราต้องตรวจสอบซ้ำ ๆ ว่ามีองค์ประกอบหนึ่งอยู่ในรายการที่เชื่อมโยงหรือไม่
หากรายการที่เชื่อมโยงว่างเปล่า เราจะคืนค่าเท็จ มิฉะนั้น หากโหนดปัจจุบันมีค่าข้อมูลเท่ากับองค์ประกอบอินพุต เราจะคืนค่าเป็นจริง ในอีกแนวทางหนึ่ง เราจะตรวจสอบองค์ประกอบซ้ำๆ ว่าองค์ประกอบนั้นเท่ากับตัวชี้ส่วนหัวปัจจุบันหรือไม่ และคืนค่าเป็นจริงหรือเท็จตามลำดับ
-
รับอินพุตและเริ่มต้นรายการที่เชื่อมโยงเพียงรายการเดียวโดยแทรกโหนดเข้าไป
-
ฟังก์ชันเรียกซ้ำแบบบูลีน searhRecursive(โหนด*ส่วนหัว องค์ประกอบ int) รับตัวชี้ส่วนหัวของรายการที่เชื่อมโยงและองค์ประกอบหลักเป็นพารามิเตอร์
-
เริ่มแรกหากส่วนหัวเป็น NULL หรือหากรายการที่เชื่อมโยงว่างเปล่า ให้คืนค่าเท็จ
-
หากองค์ประกอบที่จะค้นหาเท่ากับส่วนหัวปัจจุบันของรายการที่เชื่อมโยง ให้คืนค่า จริง
ตัวอย่าง
#include<iostream>
using namespace std;
#include<iostream>
using namespace std;
class node{
public:
int data;
node*next;
node(int d){
data=d;
node*next= NULL;
}
};
void insertAt(node*&head, int data){
node*n= new node(data);
n->next= head;
head= n;
}
bool searchRecursive(node*head,int key){
if(head==NULL){
return false;
}
if(head->data==key){
return true;
}
else{
return searchRecursive(head->next, key);
}
}
void printNode(node*head){
while(head!=NULL){
cout<<head->data<<"->";
head=head->next;
}
cout<<endl;
}
int main(){
node*head= NULL;
insertAt(head,5);
insertAt(head,4);
insertAt(head,3);
insertAt(head,2);
insertAt(head,1);
printNode(head);
if(searchRecursive(head,7)){
cout<<"present"<<endl;
}
else{
cout<<"Not Present"<<endl;
}
} ผลลัพธ์
การเรียกใช้โค้ดด้านบนจะสร้างผลลัพธ์เป็น
Not Present
เนื่องจากในรายการเชื่อมโยงที่กำหนด 1→2→3→4→5 ไม่มีองค์ประกอบ '7' ดังนั้นเราจึงส่งคืน "ไม่แสดง"