单链表两种结构:头指针,头结点与首元结点辨析

要区分头指针,头结点,首元结点这几个概念分别指什么,需要结构图来帮助阐释。

我们先来看一种不太严谨的表现形式。

1->2->3->4->NULL

头结点这个名词很具有迷惑性。比如这张图中,刚接触的新手很容易以为1就是来自头结点的数据域。但其实这个结构里我们是看不到头结点的。我们只能看到首元结点,也就是说这个1是首元结点数据域里的元素。所以首元结点,才是链表里第一个数据元素存储的位置。

单链表第一种结构:带头结点

第一种结构之中存在头结点。头结点位于首元结点之前,其数据域一般是没有意义的,有的时候可以存放一些指示信息。头指针head指向头结点头结点指针域中的head->next指向首元结点地址。这个时候要取出首元结点数据域的元素,我们是用head->next->data来实现。

单链表第二种结构:不带头结点

这种结构中是没有头结点存在的,要注意刷题网站LeetCode中的链表题默认的都是这种结构,否则刷题容易踩坑。
头指针head指向首元结点也就是第一个数据元素的存储位置,这个时候我们直接可以用head->data取出该结点数据域内的元素。head->next自然指向第二个数据元素的存储位置。

总结

头结点可带可不带。如果有头结点则头指针指向头结点(首元结点的前一个结点),如果没有头结点则头指针指向首元结点。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值