在C语言中打印链表的反转而不实际反转
本任务是使用递归函数打印给定链表的反转。程序必须打印反转,但不反转列表,这意味着节点的顺序保持不变。
在这里,程序将移动包含第一个节点地址的头指针到下一个节点,直到检查到存储在列表最后一个节点中的NULL,并打印头节点的数据。
示例
Input: 29 34 43 56 Output: 56 43 34 29
首先,节点被插入到列表中,一个指针将开始指向被插入的节点。创建最终列表后,假设temp指针将用第一个节点指针初始化,它会一直递增,直到节点的下一个地址为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
广告