单链表(Singly Linked List)是一种线性数据结构,其中每个元素(节点)包含一个数据部分和一个指向下一个节点的指针。数组(Array)则是一种线性数据结构,其中元素按顺序存储在连续的内存位置中。
要创建一个包含单链表的数组,首先需要定义单链表的节点结构,然后创建一个数组,数组的每个元素都是一个指向单链表头节点的指针。
typedef struct Node {
int data; // 数据部分
struct Node* next; // 指向下一个节点的指针
} Node;
#define ARRAY_SIZE 5
Node* createLinkedListArray() {
Node* linkedListArray[ARRAY_SIZE] = {NULL}; // 初始化数组,每个元素指向NULL
// 创建并初始化单链表
for (int i = 0; i < ARRAY_SIZE; i++) {
Node* head = NULL;
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = i;
newNode->next = head;
head = newNode;
linkedListArray[i] = head;
}
return linkedListArray;
}
原因:在使用 malloc
分配内存后,如果没有正确释放,会导致内存泄漏。
解决方法:
void freeLinkedList(Node* head) {
Node* temp;
while (head != NULL) {
temp = head;
head = head->next;
free(temp);
}
}
void freeLinkedListArray(Node** array, int size) {
for (int i = 0; i < size; i++) {
freeLinkedList(array[i]);
}
}
原因:在访问链表节点时,没有检查指针是否为 NULL
,可能导致空指针访问。
解决方法:
void printLinkedList(Node* head) {
Node* current = head;
while (current != NULL) {
printf("%d -> ", current->data);
current = current->next;
}
printf("NULL\n");
}
通过以上步骤和示例代码,你可以创建一个包含单链表的数组,并解决常见的问题。
领取专属 10元无门槛券
手把手带您无忧上云