C言語の連結リストの使用方法

C言語でリンクリストを使用する場合は、リンクリストのノードを表す構造体を定義する必要があります。各ノードにはデータ領域とポインタ領域が含まれます。その後、ポインタを操作してリンクリストのさまざまな操作を実現します。

以下に、リンクリストを作成、ノードを挿入、ノードを削除、リンクリストを走査などの操作を行うサンプルコードを示します。

#include <stdio.h>
#include <stdlib.h>

// 定义链表节点
typedef struct Node {
    int data;           // 数据域
    struct Node* next;  // 指针域
} Node;

// 创建新节点
Node* createNode(int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

// 插入节点到链表尾部
void insertNode(Node** head, int data) {
    Node* newNode = createNode(data);
    if (*head == NULL) {
        *head = newNode;
    } else {
        Node* curr = *head;
        while (curr->next != NULL) {
            curr = curr->next;
        }
        curr->next = newNode;
    }
}

// 删除节点
void deleteNode(Node** head, int data) {
    Node* curr = *head;
    Node* prev = NULL;
    while (curr != NULL && curr->data != data) {
        prev = curr;
        curr = curr->next;
    }
    if (curr == NULL) {
        printf("节点 %d 不存在\n", data);
        return;
    }
    if (prev == NULL) {
        *head = curr->next;
    } else {
        prev->next = curr->next;
    }
    free(curr);
    printf("节点 %d 已删除\n", data);
}

// 遍历链表
void printList(Node* head) {
    if (head == NULL) {
        printf("链表为空\n");
        return;
    }
    Node* curr = head;
    while (curr != NULL) {
        printf("%d ", curr->data);
        curr = curr->next;
    }
    printf("\n");
}

int main() {
    Node* head = NULL;

    // 插入节点到链表
    insertNode(&head, 1);
    insertNode(&head, 2);
    insertNode(&head, 3);

    // 遍历链表
    printList(head);  // 输出:1 2 3

    // 删除节点
    deleteNode(&head, 2);
    printList(head);  // 输出:1 3

    return 0;
}

上記のコードでは、LinkedListNode構造体を定義し、ノードの作成、挿入、削除、リストの走査などの操作を実装しています。main関数では、リストを作成し、対応する操作を実行し、最終的にリストの内容を出力します。

bannerAds