输入一个整数n,再输入n(n小于30000)个整数,按照输入的顺序建立单链表,并遍历所建立的单链表,输出这些数据。 输入格式 测试数据有多组,处理到文件尾。每组测试输入一个整数n,再输入n个整数。 输出格式 对于每组测试,输出顺序链表中的各结点的数据域的值(数据之间留一个空格)。 输入样例 在这里给出一组输入。例如: 5 1 2 3 4 5 输出样例 在这里给出相应的输出。例如: 5 4 3 2 1 5 4 3 2 1用c中的链表实现并逐步解释
时间: 2025-03-21 08:02:37 浏览: 45
要用C语言实现这个题目需求,可以借助单链表的基本操作来完成任务。以下是完整的解决方案以及步骤解析:
---
### **程序代码及详细说明**
```c
#include <stdio.h>
#include <stdlib.h>
// 定义单链表节点结构体
typedef struct Node {
int data; // 数据域
struct Node* next;// 指针域指向下一个节点
} Node;
// 创建新节点函数
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node)); // 动态分配内存
if (newNode == NULL) { // 内存不足检查
printf("Memory allocation failed\n");
exit(1);
}
newNode->data = value; // 初始化数据域
newNode->next = NULL; // 初始指针为空
return newNode;
}
// 插入节点到链表头部(头插法)
void insertAtHead(Node** head, int value) {
Node* newNode = createNode(value); // 调用创建新节点函数
newNode->next = *head; // 新节点的next指向原链表的第一个节点
*head = newNode; // 更新链表头指针为新的节点
}
// 遍历并打印链表内容
void printList(Node* head) {
while (head != NULL) { // 当前节点非空时继续遍历
printf("%d ", head->data); // 打印当前节点的数据
head = head->next; // 移动到下一节点
}
printf("\n"); // 输出换行符结束一行
}
// 主函数
int main() {
int n, num; // 定义变量存储输入的数量和数值
// 循环读取多组测试数据直到EOF
while (scanf("%d", &n) != EOF && n > 0 && n < 30000) {
Node* head = NULL; // 初始化链表头指针为空
for (int i = 0; i < n; ++i) {
scanf("%d", &num); // 逐个读取n个整数
insertAtHead(&head, num); // 将每个数字作为新节点插入到链表头部
}
// 遍历整个链表并按顺序输出结果
printList(head);
// 清理动态申请的空间以防内存泄漏
Node* temp;
while (head != NULL) {
temp = head;
head = head->next;
free(temp);
}
}
return 0;
}
```
---
### **逐步解析**
1. **定义节点结构体:**
- 使用`struct Node`表示链表的一个节点。
- 包含两个部分:`data`用于保存实际数据;`next`是一个指针,指向链表中的下一个节点。
2. **创建新节点:**
- 函数`createNode()`通过`malloc()`动态分配一块足够大的空间给新节点,并初始化其数据成员和指针。
3. **插入节点:**
- `insertAtHead()`实现了“头插法”——每次将新建节点添加到链表头部。
- 这种方式会自动反转输入序列的顺序(如例子所示),因此最后得到的结果正好是从最后一个元素开始往前排列的所有原始输入项。
4. **打印链表内容:**
- `printList()`从链表开头出发逐一访问每一个节点直至遇到NULL停止,在过程中依次显示各节点内的信息。
5. **主循环逻辑控制:**
- 程序持续接收用户提供的有效正整型值数目及其对应的具体数值集合作为一组独立的任务来执行上述过程;
- 直至到达文件末尾标志位为止才终止运行流程。
6. **释放资源避免泄露:**
- 对于每一次构建好的完整链条都应该彻底销毁它已腾出之前消耗掉的部分堆栈区域容量供后续其他用途再次利用起来。
---
### **示例演示**
假设我们有以下输入:
```
5 1 2 3 4 5
3 7 8 9
```
则对应的输出将是这样的两行文本串列形式呈现出来:
```
5 4 3 2 1
9 8 7
```
这里第一段五个连续自然数经过反复运用头端插入手法之后形成了倒叙模式排布的新系列集合展示效果;而第二批次三个随机选取的不同数值同样如此处理完毕后也展现出了同样的特性规律特征。
---
阅读全文
相关推荐


















