Pointer如何实现链表

发布时间:2025-02-24 07:04:11 作者:小樊
来源:亿速云 阅读:113

在计算机科学中,链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。使用指针实现链表可以让你动态地分配内存,并且可以方便地进行插入和删除操作。

以下是使用C语言实现单链表的基本步骤:

  1. 定义节点结构体:
typedef struct Node {
    int data;           // 节点存储的数据
    struct Node* next;  // 指向下一个节点的指针
} Node;
  1. 创建新节点:
Node* createNode(int data) {
    Node* newNode = (Node*)malloc(sizeof(Node)); // 分配内存
    if (newNode == NULL) {
        fprintf(stderr, "Memory allocation failed\n");
        exit(1);
    }
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}
  1. 在链表末尾添加节点:
void appendNode(Node** head, int data) {
    Node* newNode = createNode(data);
    if (*head == NULL) {
        *head = newNode;
        return;
    }
    Node* current = *head;
    while (current->next != NULL) {
        current = current->next;
    }
    current->next = newNode;
}
  1. 在链表头部添加节点:
void prependNode(Node** head, int data) {
    Node* newNode = createNode(data);
    newNode->next = *head;
    *head = newNode;
}
  1. 删除链表中的节点:
void deleteNode(Node** head, int key) {
    Node* temp = *head;
    Node* prev = NULL;

    // 如果头节点本身就持有要删除的数据
    if (temp != NULL && temp->data == key) {
        *head = temp->next; // 改变头节点
        free(temp);         // 释放旧的头节点
        return;
    }

    // 寻找要删除的节点,保持追踪前一个节点
    while (temp != NULL && temp->data != key) {
        prev = temp;
        temp = temp->next;
    }

    // 如果找不到节点
    if (temp == NULL) return;

    // 解除链接并释放内存
    prev->next = temp->next;
    free(temp);
}
  1. 打印链表:
void printList(Node* node) {
    while (node != NULL) {
        printf("%d -> ", node->data);
        node = node->next;
    }
    printf("NULL\n");
}
  1. 主函数示例:
int main() {
    Node* head = NULL;

    appendNode(&head, 1);
    appendNode(&head, 2);
    appendNode(&head, 3);
    prependNode(&head, 0);

    printf("Created Linked List: \n");
    printList(head);

    deleteNode(&head, 2);

    printf("Linked List after deletion of 2: \n");
    printList(head);

    return 0;
}

这段代码定义了一个简单的单链表,并提供了创建节点、添加节点到链表末尾和头部、删除节点以及打印链表的功能。在实际应用中,你可能还需要实现更多的功能,比如查找节点、反转链表等。

推荐阅读:
  1. 如何设置安全的数据库密码
  2. 怎么使用时间序列数据库

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

数据库

上一篇:Pointer如何避免野指针

下一篇:Pointer有哪些类型

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》