📜  从给定数组创建链表(1)

📅  最后修改于: 2023-12-03 15:06:38.035000             🧑  作者: Mango

从给定数组创建链表

链表是一种常用的数据结构,可以用来存储任意类型的数据。在本文中,我们将讨论如何从给定数组创建链表。

链表和数组的区别

在使用链表之前,让我们先来回顾一下数组和链表之间的区别。数组是一种静态数据结构,指的是一组相同类型的元素,这些元素在内存中的位置是连续的。链表是一种动态数据结构,它由一系列节点组成,每个节点包含了一个数据元素和指向下一个节点的指针。

既然我们已经了解了链表和数组之间的基本区别,那么让我们开始从给定数组创建链表!

从给定数组创建链表的步骤

创建链表的基本步骤如下:

  1. 分配头节点
  2. 遍历数组
  3. 为每个数组元素创建一个新的节点
  4. 将新节点添加到链表中

让我们逐步来看一下这些步骤,并使用 C 代码片段示例:

1. 分配头节点

头节点是链表的起点,它不包含任何数据。然而,它包含了一个指向链表中第一个数据节点的指针。

typedef struct Node {
    int data;
    struct Node *next;
} Node;

Node *head = NULL;

2. 遍历数组

使用 for 循环遍历数组。

for (int i = 0; i < n; i++) {
    // 创建新的节点并为其分配空间
    Node *newNode = (Node*) malloc(sizeof(Node));
    
    // 设置新节点的数据
    newNode->data = arr[i];
    
    // 使新节点指向下一个节点
    newNode->next = NULL;
}

3. 为每个数组元素创建一个新的节点

对于数组中的每个元素,我们都需要创建一个新节点来存储它。如果要创建一个新节点,我们需要分配一个新的内存块,并将其类型转换为 Node*。

Node *newNode = (Node*) malloc(sizeof(Node));

4. 将新节点添加到链表中

添加新节点时,我们需要注意一些细节。如果新节点是链表的第一个节点,则需要将头节点指向它。否则,需要遍历链表,找到最后一个节点,并将其 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;
}
总结

在使用链表时,从给定数组创建链表是一个常见的任务。在本文中,我们学习了如何从给定数组创建链表,包括创建头节点、遍历数组、为每个数组元素创建新节点以及将新节点添加到链表中。在实际编程中,这些步骤将帮助我们快速并且轻松地创建出我们需要的链表。