งานคือการพิมพ์ย้อนกลับของรายการที่เชื่อมโยงที่กำหนดโดยใช้ฟังก์ชันเรียกซ้ำ โปรแกรมต้องพิมพ์ย้อนกลับแต่ไม่กลับรายการซึ่งหมายความว่าลำดับของโหนดยังคงเหมือนเดิม
ที่นี่โปรแกรมจะย้ายตัวชี้ส่วนหัวที่มีที่อยู่ของโหนดแรกไปยังโหนดถัดไปจนกว่าจะมีการตรวจสอบ NULL ซึ่งจัดเก็บไว้ในโหนดสุดท้ายของรายการและพิมพ์ข้อมูลของโหนดหลัก
ตัวอย่าง
Input: 29 34 43 56 Output: 56 43 34 29
ประการแรก โหนดจะถูกแทรกลงในรายการ และตัวชี้จะเริ่มชี้ไปที่โหนดที่แทรก หลังจากสร้างรายการขั้นสุดท้ายแล้ว สมมติว่าตัวชี้ชั่วคราวจะเริ่มต้นด้วยตัวชี้โหนดแรกและจะเพิ่มขึ้นเรื่อย ๆ จนกว่าที่อยู่ถัดไปของโหนดจะเป็น NULL เนื่องจากโหนดสุดท้ายชี้ไปที่ไม่มีอะไร และจากโหนดสุดท้าย รายการจะถูกข้ามไปจนถึงตัวชี้ส่วนหัว มันจะแสดงกลับรายการโดยไม่ต้องย้อนกลับรายการจริง ๆ
โค้ดด้านล่างแสดงการใช้งาน c ของอัลกอริทึมที่กำหนด
อัลกอริทึม
START Step 1 -> create node variable of type structure Declare int data Declare pointer of type node using *next Step 2 ->Declare function void reverse(node* head) IF head == NULL return Call reverse(head->next) Print head->data Step 3 -> Declare Function void push(node** header, char newdata) Allocate memory using malloc Set newnode->data = newdata Set newnode->next = (*header) Set (*header) = newnode Step 4 ->In Main() Create list using node* head = NULL Insert elements through push(&head, 56) Call reverse(head) STOP
ตัวอย่าง
#include<stdio.h> #include<stdlib.h> //creating structure for a node struct node { int data; node* next; }; //function to print reverse of the data in the list void reverse(node* head) { if (head == NULL) return; reverse(head->next); printf("%d ", head->data); } //function to puch the node in the list void push(node** header, char newdata) { struct node* newnode = (struct node*)malloc(sizeof(struct node)); newnode->data = newdata; newnode->next = (*header); (*header) = newnode; } int main() { node* head = NULL; push(&head, 56); //calling function to push 56 in the list push(&head, 43); push(&head, 34); push(&head, 29); reverse(head); return 0; }
ผลลัพธ์
หากเรารันโปรแกรมด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้
reverse of a linked list 56 43 34 29