当前位置: 首页 > news >正文

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

一. 简介

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

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

二. C语言实现单向链表

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

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

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

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

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

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

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

//定义链表节点
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->next != NULL; i++) {
        tmp_p = tmp_p->next;
    }

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


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

相关文章:

  • lerobot[部署,元数据集,加载数据集]
  • Java学习总结-线程同步
  • keil5忽略警告
  • S32K144入门笔记(二十五):FlexCAN初始化序列
  • LeetCode 1169 查询无效交易
  • 【嵌入式系统设计师】知识点:第3章 嵌入式硬件设计
  • HCIP【路由策略技术(详解)】
  • 1️⃣ 智能体基础入门教学(2025年全新版本)
  • 国内 windows powershell 安装 scoop
  • Llama 4 家族:原生多模态 AI 创新的新时代开启
  • 消息队列基础概念及选型,常见解决方案包括消息可靠性、消息有序、消息堆积、重复消费、事务消息
  • 企业网站模板源码 免费网站模板下载
  • 基础算法模拟(超详细)
  • 【spring02】Spring 管理 Bean-IOC,基于 XML 配置 bean
  • Java面试黄金宝典37
  • Spring 中的事务
  • 设计模式简述(六)代理模式
  • APS相关知识
  • 鸿蒙版(ArkTs) 贪吃蛇,包含无敌模式 最高分 暂停和继续功能
  • 语法: result=labs( value);
  • 做一个网站怎么做的吗/最近最新新闻
  • 成都市微信网站建设公司/千锋教育培训机构怎么样
  • 网站建设与网页设计大作业/b2b网站大全免费推广
  • 白狐网站建设/网络营销seo培训
  • 镜湖区城乡建设委员会网站/seo裤子的关键词首页排名有哪些
  • 网站建设的知识和技能/公司网站seo公司