数据结构:单链表——带头结点与不带头结点步骤详解

单链表:带头结点与不带头结点详解

在本人的另一篇文章中,通过java实现了带头结点和不带头结点的单链表,有兴趣的小伙伴可以去看下数据结构(一):链表(Linked List)

这两天回顾下链表的知识,关于单链表带头结点和不带头结点有点迷糊了,就去网上查询了下,结果查完心态都炸了。看的整个人更懵逼了!!!

网上大部分对于带头结点和不带头结点的文章,对不带头结点的链表的表头插入结点的代码,都是错的。我简单截几个图:

在这里插入图片描述
在这里插入图片描述

正确的步骤应该如下
x->next = head;//此处x是待插入结点
head = x;

下面我们讲下具体带头结点和不带头结点的一个情况。

头指针:通常使用“头指针”来标识一个链表,如单链表L,头指针为NULL的时表示一个空链表。链表非空时,头指针指向的是第一个结点的存储位置。

头结点:在单链表的第一个结点之前附加一个结点,称为头结点。头结点的Data域可以不设任何信息,也可以记录表长等相关信息。若链表是带有头结点的,则头指针指向头结点的存储位置。

无论是否有头结点,头指针始终指向链表的第一个结点。如果有头结点,头指针就指向头结点(只不过头结点的数据域为空而已)。

在这里插å¥å›¾ç‰‡æè¿°

这里就有个问题:为什么链表要区有带头结点和不带头结点两种?

答案很简单,为了方便。就跟记事本也可以写代码,你却更喜欢编辑器一样的。

具体操作上方便在哪里,我们接下来看下。

①不带头结点的链表,在表头插入结点

x->next = head;
head = x;

不带头结点的链表,在表头以外的地方插入结点

x->next = p->next;
p->next = x;

②带头结点的链表,在第一个位置插入结点

x->next = p->next;
p->next = x;

带头结点的链表,在其他位置插入结点

x->next = p->next;
p->next = x;
这个时候你会发现,不带头结点的链表的两种情况操作步骤不一样;而带头结点的两种情况操作步骤是一样的。是不是对插入操作就方便了呢!

参考文章:https://blog.csdn.net/c_base_jin/article/details/103115079(某些定义参考)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值