// linkedlist.c #include #include #include "linkedlist.h" // 创建新节点并为其分配不定长数组 Node* createNode(int* arr, int size) { Node* newNode = (Node*)malloc(sizeof(Node)); if (!newNode) { printf("内存分配失败\n"); exit(1); } newNode->data = (int*)malloc(size * sizeof(int)); // 分配数组内存 if (!newNode->data) { printf("数组内存分配失败\n"); free(newNode); // 释放节点内存 exit(1); } for (int i = 0; i < size; i++) { newNode->data[i] = arr[i]; } newNode->size = size; newNode->next = NULL; return newNode; } // 向链表末尾添加节点 void appendNode(Node** head, int* arr, int size) { Node* newNode = createNode(arr, size); if (*head == NULL) { *head = newNode; return; } Node* temp = *head; while (temp->next != NULL) { temp = temp->next; } temp->next = newNode; } // 删除链表的第一个节点 void deleteFirstNode(Node** head) { if (*head == NULL) { printf("链表为空,无法删除第一个节点。\n"); return; } Node* temp = *head; *head = (*head)->next; free(temp->data); // 释放数组 free(temp); // 释放节点 printf("第一个节点已删除。\n"); } // 打印链表 void printList(Node* head) { Node* temp = head; while (temp != NULL) { printf("节点数组: "); for (int i = 0; i < temp->size; i++) { printf("%d ", temp->data[i]); } printf("\n"); temp = temp->next; } } // 释放链表占用的内存 void freeList(Node* head) { Node* temp; while (head != NULL) { temp = head; head = head->next; free(temp->data); // 释放节点中的数组 free(temp); // 释放节点本身 } } // 获取链表中节点的数量 int getListSize(Node* head) { int count = 0; Node* temp = head; while (temp != NULL) { count++; temp = temp->next; } return count; }