简单介绍一下本人自我总结的单链表头插法与尾插法
#前言:这是本人新手时学习单链表头插与尾插的总结,可能有些地方描述得不太好,如有错误,烦请大家指出,谢谢!
单链表头插法:
头插则是将新节点链接到链表的头结点的后面,即不断的在头节点和第一个节点之间插入新节点,每插入一个新节点,新节点就变为第一个节点,(可理解为插队)以此循环。
// (生成的链表结点次序与输入的顺序相反)
头插法模型图如下:
具体操作代码如下 :
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
总结:头插和尾插的原理大体上都是三步:为新节点分配空间---->链接新节点---->给新节点输入数据
更多推荐
C语言单链表的头插法与尾插法
发布评论