📅  最后修改于: 2023-12-03 15:06:38.035000             🧑  作者: Mango
链表是一种常用的数据结构,可以用来存储任意类型的数据。在本文中,我们将讨论如何从给定数组创建链表。
在使用链表之前,让我们先来回顾一下数组和链表之间的区别。数组是一种静态数据结构,指的是一组相同类型的元素,这些元素在内存中的位置是连续的。链表是一种动态数据结构,它由一系列节点组成,每个节点包含了一个数据元素和指向下一个节点的指针。
既然我们已经了解了链表和数组之间的基本区别,那么让我们开始从给定数组创建链表!
创建链表的基本步骤如下:
让我们逐步来看一下这些步骤,并使用 C 代码片段示例:
头节点是链表的起点,它不包含任何数据。然而,它包含了一个指向链表中第一个数据节点的指针。
typedef struct Node {
int data;
struct Node *next;
} Node;
Node *head = NULL;
使用 for 循环遍历数组。
for (int i = 0; i < n; i++) {
// 创建新的节点并为其分配空间
Node *newNode = (Node*) malloc(sizeof(Node));
// 设置新节点的数据
newNode->data = arr[i];
// 使新节点指向下一个节点
newNode->next = NULL;
}
对于数组中的每个元素,我们都需要创建一个新节点来存储它。如果要创建一个新节点,我们需要分配一个新的内存块,并将其类型转换为 Node*。
Node *newNode = (Node*) malloc(sizeof(Node));
添加新节点时,我们需要注意一些细节。如果新节点是链表的第一个节点,则需要将头节点指向它。否则,需要遍历链表,找到最后一个节点,并将其 next 指针指向新节点。
if (head == NULL) {
// 如果链表为空,则将头节点指向新节点
head = newNode;
} else {
// 否则,遍历链表并将新节点添加到最后一个节点的 next 指针
Node *current = head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
下面是从给定数组创建链表的完整代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
Node *head = NULL;
void printList() {
Node *current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
}
void createList(int arr[], int n) {
for (int i = 0; i < n; i++) {
Node *newNode = (Node*) malloc(sizeof(Node));
newNode->data = arr[i];
newNode->next = NULL;
if (head == NULL) {
head = newNode;
} else {
Node *current = head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
createList(arr, n);
printList();
return 0;
}
在使用链表时,从给定数组创建链表是一个常见的任务。在本文中,我们学习了如何从给定数组创建链表,包括创建头节点、遍历数组、为每个数组元素创建新节点以及将新节点添加到链表中。在实际编程中,这些步骤将帮助我们快速并且轻松地创建出我们需要的链表。