C语言单链表的头插法与尾插法

简单介绍一下本人自我总结的单链表头插法与尾插法

#前言:这是本人新手时学习单链表头插与尾插的总结,可能有些地方描述得不太好,如有错误,烦请大家指出,谢谢!

单链表头插法:
头插则是将新节点链接到链表的头结点的后面,即不断的在头节点和第一个节点之间插入新节点,每插入一个新节点,新节点就变为第一个节点,(可理解为插队)以此循环。
// (生成的链表结点次序与输入的顺序相反)

头插法模型图如下:

在这里插入图片描述

具体操作代码如下 :

Struct Node{
Char data;
Struct Node *next;
}

先创建链表 
struct Node *head = (struct Node *)malloc(sizeof(struct Node));
head -> next = NULL;
在新结点没有插入之前是<1>过程,即 
head->next = first;
first ->next = NULL;
在新结点插入后是<2>过程,即
P->next = head->next;
head->next = P;

PS:这里介绍一下“电子量产工具”项目视频里韦东山老师所用的头插法。

static PDispOpr g_DispDevs = NULL;  // g_DispDevs是链表头(火车头),所谓链表就是一个指针,一开始它是空的
void RegisterDisplay(PDispOpr ptDispOpr)
{
    /* 韦老师的写法,我对此的理解是:先建立一个头指针g_DispDevs(火车头),
    * 首先先明确一点g_DispDevs = NULL,就是说火车头没有连任何车厢,现在假设我有一个LCD相关的结构体要加到这个链表(火车),火车头连接第一节车厢。
    *  过程:
    * 1.先确定你要添加的那节车厢的去向
    * (就是你要添加的那节车厢要连去哪里,要是单链表,那最后一节车厢的去向是NULL)
    *  2.因为我认为韦老师写的是头插法,所以头指针,也就是火车头连向要加的那一节车厢。
    *  附:头插则是将新节点链接到链表的头结点的后面,即不断的在头节点和第一个节点之间插入新节点,
    *  每插入一个新节点,新节点就变为第一个节点,(可理解为插队)以此循环。
    */ 
    ptDispOpr->ptNext = g_DispDevs;             
    g_DispDevs = ptDispOpr;         
}

上述方法示意图如下:

在这里插入图片描述
尾插法:
尾插则是将新节点链接到链表的尾部,// (生成的链表结点次序与输入的顺序一样)

尾插法示意图如下:

在这里插入图片描述

先创建链表 
struct Node *head = (struct Node *)malloc(sizeof(struct Node));
head -> next = NULL;
在新结点没有插入之前是<1>过程,即 
head->next = end;
end->next = NULL;
在新结点插入后是<2>过程,(end是指向最后一个结点的指针)即
P->next = end->next;
end->next = P;
end = P;	// 这时候的P已经为最后一个结点了,所以end
指针指向P

总结:头插和尾插的原理大体上都是三步:为新节点分配空间---->链接新节点---->给新节点输入数据

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值