เราได้รับค่าจำนวนเต็มที่จะใช้เพื่อสร้างรายการที่เชื่อมโยง ภารกิจคือการแทรกก่อนแล้วจึงข้ามผ่านรายการที่เชื่อมโยงเพียงอย่างเดียวโดยใช้วิธีการแบบเรียกซ้ำ
การเพิ่มโหนดแบบเรียกซ้ำในตอนท้าย
-
ถ้า 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