设计一个不带头结点的单链表的递归算法,用尾插法输入5个数据,反向输出单链表数据
时间: 2023-04-24 09:05:00 浏览: 145
递归算法如下:
1. 定义一个单链表结构体Node,包含数据域和指向下一个节点的指针域。
2. 定义一个函数createList,用于创建单链表。该函数接收一个指向头节点的指针,以及一个整型变量n,表示需要创建的节点数。
3. 在createList函数中,首先判断n是否为0,如果是,则返回空指针;否则,创建一个新节点,将其数据域赋值为用户输入的数据,将其指针域赋值为NULL。
4. 然后递归调用createList函数,将n减1,将新节点的指针域指向递归返回的节点。
5. 最后返回新节点的指针。
6. 在主函数中,调用createList函数创建单链表,并用尾插法输入5个数据。
7. 定义一个函数reversePrint,用于反向输出单链表数据。该函数接收一个指向头节点的指针。
8. 在reversePrint函数中,首先判断当前节点是否为空,如果是,则返回;否则,递归调用reversePrint函数,输出下一个节点的数据,然后输出当前节点的数据。
完整代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
Node *createList(Node **head, int n) {
if (n == 0) {
return NULL;
}
Node *newNode = (Node *)malloc(sizeof(Node));
printf("请输入第%d个节点的数据:", n);
scanf("%d", &newNode->data);
newNode->next = NULL;
newNode->next = createList(head, n - 1);
if (*head == NULL) {
*head = newNode;
}
return newNode;
}
void reversePrint(Node *head) {
if (head == NULL) {
return;
}
reversePrint(head->next);
printf("%d ", head->data);
}
int main() {
Node *head = NULL;
createList(&head, 5);
printf("反向输出单链表数据:");
reversePrint(head);
printf("\n");
return 0;
}
阅读全文