C语言中单向链表:创建节点与插入新节点

一. 简介

单链表是一种常见且基础的数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针。

本文简单学习一下C语言中如何实现单项链表。

二. C语言实现单向链表

单向链表:单向链表是一种线性数据结构,由一系列节点组成,每个节点包含两部分:

数据域:存储实际的数据。

指针域:存储指向下一个节点的地址。

单向链表关键点在于:每个节点只有一个指向下一个节点的指针,没有指向前一个节点的指针。

1. 定义链表节点,创建新节点

要实现单链表,首先要定义节点的结构,节点通常包含数据和指向下一个节点的指针。

#include 
#include 

//定义链表节点
typedef struct Node {
    int data;
    struct Node* next;
} Node;

创建新节点时,需要为其分配内存,并初始化数据和指针:

//创建链表新节点
Node* create_list(int data) {
    Node* head = (Node*)malloc(sizeof(Node));
    if(head == NULL) {
        printf("malloc error!\n");
        exit(1);
    }
    head->data = data;
    head->next = NULL;
    return head; 
}

2. 插入节点

插入节点的操作,可以在链表头部,或者指定位置,尾部进行插入。下面实现像链表头部,尾部插入节点。

(1) 向链表头插入新节点:

//向链表头部插入新节点
Node* insert_at_list_head(Node* head, int data) {
    Node* new_node = create_list(data);
    new_node->next = head;
    return new_node;
}

(2) 向链表尾部插入新节点:

//向链表尾部插入新节点
Node* insert_at_list_end(Node* head, int data) {
    Node* new_node = create_list(data);
    if (head == NULL) {
        return new_node;
    }

    //找到链表尾部
    Node* st_p = head;
    while(st_p->next != NULL) {
        st_p = st_p->next;
    }
    st_p->next = new_node;
    return head;
}

(2) 向链表的指定位置插入新节点:


//在链表的指定位置插入新节点
Node* insert_at_list_middle(Node* head, int data, int position) {
    int i = 0;
    Node* new_node = create_list(data);

    //如果插入的位置是头部
    if(position == 0) {
        return insert_at_list_head(head, data);
    }

    //遍历到指定位置的前一个节点
    Node* tmp_p = head;
    for(i=0; i < position-1 && tmp_p != NULL; i++) {
        tmp_p = tmp_p->next;
    }

    //如果插入位置超过链表长度,则不进行插入
    if(tmp_p == NULL) {
        free(new_node);
        return head;
    }
    //在指定位置插入新节点
    new_node->next = tmp_p->next;
    tmp_p->next = new_node;
    return head;
}


下一篇继续学习C语言中对于链表的操作。例如,在链表中查找某个节点,删除链表中某个节点,遍历链表,释放链表等等操作。

你可能感兴趣的:(C语言,c语言,链表)