เราได้รับค่าจำนวนเต็มที่จะใช้เพื่อสร้างรายการที่เชื่อมโยง ภารกิจคือการแทรกก่อนแล้วจึงข้ามผ่านรายการที่เชื่อมโยงเพียงอย่างเดียวโดยใช้วิธีการแบบเรียกซ้ำ
การเพิ่มโหนดแบบเรียกซ้ำในตอนท้าย
-
ถ้า head เป็น NULL → เพิ่ม node ที่ head
-
เพิ่มไปที่ head( head → next )
การข้ามผ่านของโหนดแบบเรียกซ้ำ
-
ถ้า head เป็น NULL → exit
-
พิมพ์อย่างอื่น ( หัว → ถัดไป )
ตัวอย่าง
ป้อนข้อมูล − 1 - 2 - 7 - 9 - 10
ผลผลิต − Linked list :1 → 2 → 7 → 9 → 10 → NULL
ป้อนข้อมูล − 12 - 21 - 17 - 94 - 18
ผลผลิต − Linked list :12 → 21 → 17 → 94 → 18 → NULL
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
ในแนวทางนี้ เราจะใช้ฟังก์ชันต่างๆ เพื่อเพิ่มโหนดและข้ามผ่านรายการที่เชื่อมโยงโดยลำพัง และเรียกซ้ำสำหรับอินพุตถัดไป
-
ใช้โครงสร้าง SLLNode ด้วยจำนวนเต็มและตัวชี้ถัดไป SLLNode* ถัดไป
-
ฟังก์ชัน addtoEnd(SLLNode* head, int data) นำตัวชี้ไปยังส่วนหัวของรายการและจำนวนเต็มสำหรับส่วนของข้อมูล และเพิ่มโหนดที่ส่วนท้ายของรายการที่เชื่อมโยง
-
หากตัวชี้ส่วนหัวเป็น NULL รายการจะว่างเปล่า ตอนนี้ให้เพิ่มโหนดใหม่และตั้งเป็นส่วนหัว เพิ่มหัว → ถัดไปเป็น NULL ส่งคืนตัวชี้ไปยังโหนดนี้
-
หาก head ไม่เป็นค่าว่าง ให้เพิ่มโหนดไปที่ head → next โดยใช้ head->next =addtoEnd(head->next, data)
-
ฟังก์ชัน traverseList(SLLNode* head) เริ่มข้ามจากส่วนหัวและพิมพ์แต่ละค่า
-
หาก head เป็น NULL ให้พิมพ์ NULL แล้วกลับมา
-
พิมพ์ค่าข้อมูลและข้ามต่อไปโดยใช้ traverseList(head->next)
-
ภายในสร้างรายการหลักโดยใช้ addtoEnd() และพิมพ์รายการโดยใช้ traverseList()
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; struct SLLNode { int data; SLLNode* next; }; SLLNode* addtoEnd(SLLNode* head, int data){ if (head == NULL){ SLLNode *nodex = new SLLNode; nodex->data = data; nodex->next = NULL; return nodex; } else{ head->next = addtoEnd(head->next, data); } return head; } void traverseList(SLLNode* head){ if (head == NULL){ cout <<"NULL"; return; } cout << head->data << " -> "; traverseList(head->next); } int main(){ SLLNode* head1 = NULL; head1 = addtoEnd(head1, 1); head1 = addtoEnd(head1, 8); head1 = addtoEnd(head1, 56); head1 = addtoEnd(head1, 12); head1 = addtoEnd(head1, 34); cout<<"Linked List is :"<<endl; traverseList(head1); return 0; }
ผลลัพธ์
หากเรารันโค้ดด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้
Linked List is : 1 -> 8 -> 56 -> 12 -> 34 -> NULL