单向链表是一种数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。C语言中可以通过结构体来实现单向链表。

下面是一个简单的单向链表的结构体定义:

struct Node {
    int data;           // 数据元素
    struct Node* next;  // 指向下一个节点的指针
};

通过这个结构体,我们可以定义一个单向链表的头指针:

struct Node* head = NULL;

在单向链表中,添加一个节点的操作可以分为两个步骤:

  1. 创建一个新节点
  2. 将新节点插入到链表中

下面是一个向单向链表中添加节点的函数:

void addNode(int data) {
    struct Node* newNode = (struct Node*) malloc(sizeof(struct Node));  // 创建一个新节点
    newNode->data = data;  // 将数据元素赋值给新节点
    newNode->next = NULL;  // 将新节点的指针初始化为NULL,表示它是链表的最后一个节点

    if (head == NULL) {   // 如果链表为空,则将新节点设置为头节点
        head = newNode;
    } else {              // 如果链表不为空,则将新节点插入到链表的末尾
        struct Node* current = head;
        while (current->next != NULL) {  // 找到链表的最后一个节点
            current = current->next;
        }
        current->next = newNode;  // 将新节点插入到链表的末尾
    }
}

遍历单向链表可以使用一个循环来完成:

void printList() {
    struct Node* current = head;
    while (current != NULL) {  // 循环遍历链表中的节点
        printf("%d ", current->data);
        current = current->next;
    }
    printf("\n");
}

删除单向链表中的节点可以分为两个步骤:

  1. 找到要删除的节点
  2. 将要删除的节点从链表中移除

下面是一个从单向链表中删除节点的函数:

void deleteNode(int data) {
    struct Node* current = head;
    struct Node* previous = NULL;

    while (current != NULL && current->data != data) {  // 找到要删除的节点
        previous = current;
        current = current->next;
    }

    if (current == NULL) {  // 如果找不到要删除的节点,则直接返回
        return;
    }

    if (previous == NULL) {  // 如果要删除的节点是头节点,则将头指针指向下一个节点
        head = current->next;
    } else {                 // 如果要删除的节点不是头节点,则将上一个节点的指针指向下一个节点
        previous->next = current->next;
    }

    free(current);  // 释放要删除的节点的内存空间
}

这些函数只是单向链表的基本操作,还有很多其他的操作可以实现,如在指定位置插入节点、反转链表等等。

C语言单向链表

原文地址: https://www.cveoy.top/t/topic/b1Xs 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录