本关任务:用C语言编写一个能将链表使用递归方法倒叙输出的小程序。
时间: 2024-11-09 19:17:51 浏览: 14
C语言实现输出链表中倒数第k个节点
5星 · 资源好评率100%
在C语言中,你可以使用递归的方式来遍历并反转链表。这里是一个简单的例子,首先我们需要定义链表节点结构,然后创建一个函数`reverseListRecursively`来完成递归操作:
```c
// 链表节点定义
typedef struct Node {
int data;
struct Node* next;
} Node;
// 初始化一个空链表
Node* createEmptyList() {
return NULL;
}
// 创建一个新的链表节点
Node* newNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 递归地反转链表
Node* reverseListRecursively(Node* head) {
// 基线条件:如果链表为空或者只有一个元素,返回头节点
if (head == NULL || head->next == NULL)
return head;
// 递归步骤:先处理剩余部分,再将当前节点链接到头部
Node* temp = reverseListRecursively(head->next);
head->next->next = head; // 将head->next指向前一个节点
head->next = NULL; // 更新head的下一个节点为NULL
return temp; // 返回新的头节点
}
// 打印链表(辅助函数)
void printList(Node* head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
// 创建一个测试链表...
Node* testList = newNode(1);
testList->next = newNode(2);
testList->next->next = newNode(3);
// 反转链表
testList = reverseListRecursively(testList);
// 输出反转后的链表
printList(testList);
return 0;
}
```
在这个示例中,`main` 函数创建了一个测试链表,然后调用 `reverseListRecursively` 来反转它,并最后打印出结果。当你运行这个程序时,你应该能看到链表的元素按照相反的顺序显示。
阅读全文