C语言单链表头插法
文章目录
- 一.单链表
- 二.头插法
- 三.具体实现过程
- 全部代码
一.单链表
- 什么是单链表?
想象一串珍珠项链,每颗珍珠(节点)包含:
数据域:存放具体数据(如数字、字符串)
指针域:一根「看不见的线」指向下一颗珍珠
二.头插法
通俗理解单链表的「头插法」:像给火车加车厢一样简单
链表是数据结构中的「珍珠项链」,而头插法就是其中最常用的「穿珠手法」。用生活中的例子来理解:头插法就像在火车最前面加车厢,每次新节点都成为新的车头。 接下来用最直观的方式,手把手教你掌握这个核心操作。
三.具体实现过程
3.1用C语言的结构体表示:
// 定义链表节点结构体
typedef struct {
ElemType data;
struct Node* next;
} Node;
3.2 头指针的作用
类似「项链的扣头」,永远指向链表的第一个节点
链表为空时,头指针指向NULL
3.3步骤2:将新节点插入链表头部 关键操作:
让新节点的next指向原头节点
更新头指针指向新节点
p->next = node->next;
node->next = p;
模拟过程演示:
操作 图示
初始空链表 head → NULL
插入6 head → [6 NULL]
插入16 head → [16 →] → [6 NULL]
插入26 head → [26 →] → [16 →] → [6 NULL]
发现什么没?->先插入的数据反而在最后面去了.
全部代码
//
// 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);
}