ให้เชื่อมโยงรายการเดียว ภารกิจคือการค้นหาองค์ประกอบเฉพาะในรายการที่เชื่อมโยง หากพบองค์ประกอบ ให้พิมพ์ "ปัจจุบัน" มิฉะนั้น "ไม่มี" ตัวอย่างเช่น
อินพุต-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' ดังนั้นเราจึงส่งคืน "ไม่แสดง"