C语言单链表头插法

文章目录

一.单链表

  1. 什么是单链表?
    想象一串珍珠项链,每颗珍珠(节点)包含:
    数据域:存放具体数据(如数字、字符串)
    指针域:一根「看不见的线」指向下一颗珍珠

二.头插法

通俗理解单链表的「头插法」:像给火车加车厢一样简单

链表是数据结构中的「珍珠项链」,而头插法就是其中最常用的「穿珠手法」。用生活中的例子来理解:头插法就像在火车最前面加车厢,每次新节点都成为新的车头。 接下来用最直观的方式,手把手教你掌握这个核心操作。

三.具体实现过程

3.1用C语言的结构体表示:

c 复制代码
// 定义链表节点结构体
typedef struct {
    ElemType data;
    struct Node* next;
} Node;

3.2 头指针的作用

类似「项链的扣头」,永远指向链表的第一个节点

链表为空时,头指针指向NULL

3.3步骤2:将新节点插入链表头部 关键操作:

让新节点的next指向原头节点

更新头指针指向新节点

c 复制代码
    p->next = node->next;
    node->next = p;

模拟过程演示:

操作 图示

初始空链表 head → NULL

插入6 head → [6 NULL]

插入16 head → [16 →] → [6 NULL]

插入26 head → [26 →] → [16 →] → [6 NULL]

发现什么没?->先插入的数据反而在最后面去了.

全部代码

c 复制代码
//
// Created by xiaoyuan on 2025-03-08.
//


#include "stdio.h"
#include "stdlib.h"
#define MAXSIZE 100
typedef int ElemType;

// 定义链表节点结构体
typedef struct {
    ElemType data;
    struct Node* next;
} Node;

Node *initList(){
    Node *head =(Node *) malloc(sizeof(Node));
    head->data = 0;
    head->next =NULL;
    return head;
}





void insertHead(Node *node,ElemType value){
    Node *p = (Node *) malloc(sizeof(Node));
    p->data = value;
    p->next = node->next;
    node->next = p;
    printf("插入数据成功\n");
}



void showList(Node *node){
    Node  *p = node->next;  //如果这里直接用Node就会打印0
    for(int i=0;p != NULL;i++){
        printf(" %d -> ",p->data);
        p = p->next;
    }

}

int main(){

    //1.初始化链表
    Node *node = initList();

    //2.头插法
    insertHead(node,6);
    insertHead(node,16);
    insertHead(node,26);
    showList(node);
}
相关推荐
huoyueyi3 小时前
《融天AI-APP从0到1开发实录》
开发语言·lua
OpenAnolis小助手5 小时前
PHP 两个严重漏洞曝光,龙蜥社区 24 小时完成 3 版本修复
开发语言·操作系统·php·龙蜥社区
阿尼卡~6 小时前
VS Code 配置 C 语言开发环境(Windows 10/11):从 GCC 安装到运行、断点调试,一篇搞定
c语言·开发语言·windows
hhhjhl7 小时前
Undici 跨端三方库仓颉适配全流程
java·开发语言·ubuntu
染指11107 小时前
158.Agent-LangGraph-子图(共享状态和不共享状态模式)
开发语言·人工智能·python·ui·agent·agents
wangchunyu1147 小时前
JAVA JVM内存结构与运行时数据区
java·开发语言·jvm
slongzhang_7 小时前
linux 递归删除源码文件|递归删除目录下 *.js,但排除 *.min.js
linux·开发语言·javascript
云和数据.ChenGuang9 小时前
Python 常见特殊方法详解:__new__、__init__、__del__、__str__、__repr__ 与 __getattribute__
开发语言·人工智能·python·1024程序员节
xyouyuweizhu9 小时前
字节流与字符流:Java IO 的两条主线该怎么选
java·开发语言·python
多弗朗皮卡丘10 小时前
C++的IO流
开发语言·c++·io流·文件io流