C语言 写一个把数组转化成链表的函效 讲效组{1.2.3.4}转化成链表1->2->3->4 a2list([1,2,3,4})
时间: 2024-10-19 18:04:50 浏览: 26
在C语言中,将数组转换为单向链表通常需要创建一个结构体表示节点,并定义两个函数:`initList()`用于初始化链表头节点和处理数组元素,以及`arrayToLinkedList()`主函数来进行整个转换过程。下面是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct ListNode {
int val; // 节点值
struct ListNode* next; // 指向下个节点的指针
} ListNode;
// 初始化链表头节点
ListNode* initList() {
ListNode* head = (ListNode*)malloc(sizeof(ListNode));
if (!head) {
printf("Memory allocation failed.\n");
return NULL;
}
head->val = 0; // 空链表头部节点值设为0 或者你可以选择NULL
head->next = NULL;
return head;
}
// 将数组元素添加到链表
void addToArrayToList(int arr[], int size, ListNode* head) {
for (int i = 0; i < size; ++i) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode)); // 创建新节点
if (!newNode) {
printf("Memory allocation failed.\n");
break;
}
newNode->val = arr[i];
newNode->next = head->next; // 更新下一个节点指针
head->next = newNode; // 新节点成为当前节点的下一个节点
}
}
// 把数组转成链表函数
ListNode* arrayToLinkedList(int arr[], int size) {
ListNode* head = initList();
if (head != NULL) {
addToArrayToList(arr, size, head);
}
return head;
}
// 打印链表
void printList(ListNode* head) {
while (head != NULL) {
printf("%d -> ", head->val);
head = head->next;
}
printf("NULL\n");
}
int main() {
int arr[] = {1, 2, 3, 4};
int size = sizeof(arr) / sizeof(arr[0]);
ListNode* listHead = arrayToLinkedList(arr, size);
if (listHead != NULL) {
printf("Array converted to linked list: ");
printList(listHead);
} else {
printf("Failed to create the list.\n");
}
return 0;
}
```
在这个例子中,`main()`函数首先创建了一个整数数组`arr`,然后通过`arrayToLinkedList()`将其转换为链表。注意这只是一个基本实现,实际应用中可能需要考虑更多边界条件和错误处理。
阅读全文