编写一个能将链表使用递归方法倒叙输出的C语言代码创建一个含有n个节点的链表(不包含头结点),n由键盘输入,按照顺序存分别储数字1到n,使用递归的方法倒叙输出。 看看还记不记得“递归”?能否简化链表的操作。 效果如下: 输入: 5 输出: 5 4 3 2 1
时间: 2024-11-09 08:18:40 浏览: 19
在C语言中,我们可以使用递归来反转链表。首先,我们需要定义一个结构体表示链表节点,然后编写一个函数`reverseList`作为递归的核心。下面是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 递归函数,用于反转链表
Node* reverseList(Node* head) {
// 基本情况:如果链表为空或只有一个元素,则返回当前节点
if (head == NULL || head->next == NULL) {
return head;
}
// 递归步骤:交换头节点和下一个节点,并继续处理剩余部分
Node* temp = head->next; // 存储下一个节点
head->next = reverseList(temp); // 递归调用,反转剩余部分
temp->next = head; // 将当前节点链接到反转后的头部
return temp; // 返回新的头节点
}
int main() {
int n;
printf("请输入链表长度(n): ");
scanf("%d", &n);
Node* nodes = (Node*)malloc(sizeof(Node) * n);
for (int i = 0; i < n; i++) {
nodes[i].data = i + 1; // 初始化数据从1到n
nodes[i].next = (i != n - 1) ? nodes[i + 1] : NULL; // 链接相邻节点
}
// 反转链表并打印结果
Node* reversedHead = reverseList(nodes);
while (reversedHead != NULL) {
printf("%d ", reversedHead->data);
reversedHead = reversedHead->next;
}
printf("\n");
return 0;
}
```
在这个例子中,我们首先建立了一个包含n个节点的链表,然后通过递归`reverseList`函数逐步反转链表。当链表长度为1或空时,递归结束。最后,主函数会打印出反转后的链表。
阅读全文