#include <stdio.h> #include <stdlib.h> // 定义单链表节点结构 typedef struct ListNode { int val; struct ListNode *next; } ListNode; // 实现遍历链表并存储到数组的函数 void TraverseList(ListNode *list, int *array, int *size) { *size = 0; ListNode *current = list->next; // 跳过头节点 while (current != NULL) { array[*size] = current->val; (*size)++; current = current->next; } }
时间: 2025-03-25 19:09:48 浏览: 22
C语言单链表遍历并存储到数组中的实现
要将单链表的数据域值依次存入数组中,可以通过定义一个函数来完成此操作。以下是具体实现:
函数设计说明
输入参数
LinkList L
:指向单链表的头节点。ElemType array[]
:目标数组,用于存储单链表数据域的值。int *size
:传入数组大小的指针,返回实际存储的元素数量。
逻辑流程
- 初始化工作指针
p
指向单链表的第一个有效节点(即跳过头节点)。 - 使用循环逐一访问每个节点,并将其数据域值赋给数组对应位置。
- 记录已存储的元素数量以便后续处理。
- 初始化工作指针
注意事项
- 确保数组容量足够大以容纳所有单链表节点的数据[^3]。
- 如果数组容量不足,则应提前判断并提示错误或截断存储。
实现代码
#include <stdio.h>
#include <stdlib.h>
// 定义单链表结点类型
typedef struct LNode {
int data; // 数据域
struct LNode *next; // 指针域
} LinkNode, *LinkList;
// 遍历单链表并将值存储到数组中
void StoreToArray(LinkList L, int array[], int *size) {
LinkNode *p = L->next; // 工作指针初始化为第一个有效节点
int i = 0;
while (p != NULL && i < *size) { // 循环条件需考虑数组容量
array[i++] = p->data; // 将当前节点数据存入数组
p = p->next; // 移动到下一个节点
}
*size = i; // 更新实际存储的数量
}
// 测试函数
int main() {
// 创建测试单链表
LinkList head = (LinkList)malloc(sizeof(LinkNode));
head->next = NULL;
// 插入一些节点
for (int i = 5; i >= 1; --i) {
LinkNode *newNode = (LinkNode *)malloc(sizeof(LinkNode));
newNode->data = i;
newNode->next = head->next;
head->next = newNode;
}
// 打印原始单链表
printf("Original Linked List:\n");
LinkNode *temp = head->next;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
// 存储到数组
const int MAX_SIZE = 10;
int array[MAX_SIZE];
int size = MAX_SIZE;
StoreToArray(head, array, &size);
// 输出数组内容
printf("Array Content After Storing:\n");
for (int i = 0; i < size; ++i) {
printf("%d ", array[i]);
}
printf("\n");
return 0;
}
关键点解析
动态内存分配
单链表通过malloc()
动态申请存储空间,避免了静态数组带来的固定长度限制。数组边界控制
在遍历时加入对数组容量的检查,防止越界写入引发未定义行为[^1]。函数封装性
提供了一个通用接口StoreToArray
来完成从单链表到数组的转换,增强了代码复用性和模块化程度[^4]。
相关推荐


















