数据结构:头指针,头结点详解(新手.小白)

article/2025/11/9 2:38:53

如果不想看定义的话,可以看我的第二部分,里面有我自己遇到的一些疑难。
 

下文中出现的有关于java的,也有c语言的指针(可以看成java的引用变量),觉得写得不好,多多包涵
 

目录

  • (一)定义详解
  • (二)个人理解

(一)定义详解

 
1.头结点:(1)数据结构中,在单链表的开始结点之前设立一个节点称之为头结点,头结点的数据域可以不存储任何信息,也可以存储链表的长度等附加信息,头结点的指针域存储指向第一个结点的指针(即第一个结点的存储位置)。
 
     (2)作用:方便链表的操作,减少代码量,举个例子,要知道在链表中插入,删除一个元素是更改这个结点上一个结点的指针域的位置来实现的,那么怎么样来对第一个结点来进行这些操作,有,但是麻烦,不如引入一个头结点来的方便。总之,引入头结点就可以很少的考虑到一些特殊情况,减少代码量。
 
2.头指针
注意注意注意(1)头指针是指链表中 ,指向第一个结点的指针。 这一点很重要
      (2)头指针具有标识作用,所以常常会用头指针冠以链表的名字。所以你定义一个链表,那么链表的名字一般就是这个链表的头指针。例如:

ListNode L = new ListNode(0);

这个新实例化的链表名字L就是这个链表的头指针。
(3)无论链表是否为空,头指针均不为空,头指针是链表的必要元素。
 

(二)个人理解

 
在我学习数据结构的时候,因为对头指针和头结点的理解不够深刻,曾花费了自己大量的时间,下面的都是我自己遇到的一些疑难,我写下来一一解答,即是对自己这段阶段的完美的结束,也希望能帮到你们。这是我对java链表的定义(很浅显):

public class ListNode{int val;//定义数据域ListNode next;//定义指针域ListNode(int x){val = x;}
}

 
 
1.大部分情况下,我们说的链表指的都是带着头结点的链表,如链表L,它的头结点在第一个元素结点之前,所以这个链表的第一个结点是指头结点,第一个元素结点在头结点之后,而这第一个元素结点通常也被说为开始结点。话不多说,放图(好难画):
 

注意注意:这是带有头结点的链表,有的链表是不带有头结点,自己多观察
 

在这这里第一个结点是头结点里插入图片描述
这张图里第一个结点是头结点,所以头指针指向头结点
 
2.头指针是指向第一个结点位置的指针,所以当链表有头结点时,那么头指针就是指向头结点的指针了,当链表没有头结点时,头指针就是指向第一个元素结点即开始结点的指针了。
 
3.曾经我碰到这么一行代码,没怎么看懂:

	public ListNode reverse(ListNode head){ListNode dummy = new ListNode(0);dummy.next = head;

曾经的我是这样以为的:嗯,new一个新的链表,没错,然后让传进来的链表的头指针head的值(即地址)赋值给这个新的链表dummy的头指针,没错啊,咦,不啊?next不是下一个的意思吗?那么dummy.next = head 的意思不就是将head这个头指针的值(就是头结点的地址)赋值给dummy的下一个指针,那么dummy这个链表里就是头指针dummy的下一个指针的值(即地址)指向head这个链表头结点,那我就这样说,头指针dummy的下一个指针指向了head这个头指针,那么dummy指到哪里去了呢?这位置怎么没有对上嘞?那后面的位置不都是错开来的吗?我好烦!画个图就是这样:
在这里插入图片描述
曾经的我为了这个问题想破了天,也在网上搜了不少,诶,却依然没弄懂,因为这个问题,导致我对诸如此类的链表传递地址,都是头指针的位置没有对上,导致我对后面的代码,脑子里都是大大的疑惑,虽然思路看懂了,但是却依旧为此烦恼,原因皆因为这个头指针的问题。
 
答案:next在java链表里的定义(我定义的,不一定是别人定义的)的意思是指针域的意思(请看上面我对链表的定义),在这里就不能看做英文里下一个的意思,所以dummy.next = head 的意思是将head这个头指针赋值给dummy这个头指针的指针域,这样就对的上了,即传进来的形参head变量是个地址,指向head这个链表头结点,将head这个指针的值(即头结点的地址)复制给dummy.next,就是dummy这个链表的头指针被赋值了一个地址,这个地址指向head这个链表头结点的位置。这么说的话,就是正确的了,两个链表就能对的上了。可能有一点点绕口,请慢慢品尝。
 
个人觉得第三点是最重要的
**如有不对,请指正,谢谢!!


http://chatgpt.dhexx.cn/article/RxLtRT6V.shtml

相关文章

头结点的含义以及引入头结点的作用

一、概念 头结点:是虚拟出来的一个节点,不保存数据。头结点的next指针指向链表中的第一个节点。对于头结点,数据域可以不存储任何信息,也可存储如链表长度等附加信息。头结点不是链表所必需的。 头指针:是指向第一个结点的指针,如果链表没有…

qpython 3h下载_【分享】QPython 3H3.0.0 一个伟大的脚本编辑器!

这有点。。。东西!!! 【应用名称】:QPython 3H 【应用版本】:3.0.0 【应用大小】:25.41M 【软件介绍】: 这个软件集成了Python3解释器、Console控制台、QEdit编辑器和SL4A库,可以直接在安卓手机上运行Python代码&…

qpython3l_qpython3例子

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 在控制台使用计划界面创建使用计划,并将使用计划与已创建的密钥对绑定(参考 使用计…

qpython 3h_QPython 3H

qpython 3h一款用于线上编辑来提供的手机软件,能够让你轻松的进行法语内容的快速编辑,用户只需要通过输入之后即可轻松的在软件生成法语,还能够轻松的将文字转化成相对应的法语让你在翻译的时候享受便捷效果,更是还拥有着独特的解…

说一说Qpython3在Android手机上的应用

QPython3是一款可以完美运行于Android平台上的Python3的脚本引擎,QPython3整合了Python3解释器、Console、编辑器和SL4A库。让你在Android设备上也能方便的开发Python项目。 研究Qpython也有一段时间了,一直想记录一些东西以便后面可以回顾,…

Visio使用技巧备忘录

用Visio画图过程中,将遇到的问题记录下来,以免忘记。 内容如下: 1、画流程图时,新建,根据需求选里面的模板。(第一次选的空白绘图,啥都没有) 2、画箭头,点击指针工具旁边…

Visio使用技巧之默认字体大小更改

然而这东西不能保存,但是也算是全局设置,免了一步一步设置的烦恼

visio 使用技巧汇总

1.visio中图形旋转任意角度的方法 视图----任务窗格----大小与位置----角度 2.箭头形状 更多形状---流程图----箭头形状 3.汇制虚线框 从基本形状中拖出一个矩形,右击矩形,选择设置形状格式,填充选择无填充,开始菜单栏中的形状样式选择线条---虚线即可 4.云状图 (1)开始---…

【visio使用技巧】图片导出pdf时去掉多余空白

问题 在visio导出pdf格式的图片时,往往会存在多余的白边,如下图所示: 解决方法 依次点击:菜单栏→文件→选项→自定义功能区→勾选“开发工具”→确定。 依次点击菜单栏→开发工具→显示ShapeSheet→页→Print Properties→将…

软件开发过程中的Visio使用

文章目录 前言一、思维导图二、用例图三、跨系统流程图四、流程图五、时序图六、其他图形 前言 在软件需求分析和设计过程中,时常需要通过图形来梳理和表达软件的运行原理。visio是一款专业的办公绘图软件,具有简单、便捷等关键特性。它能够帮助我们将自…

visio使用小技巧

文章目录 1.取消首字母自动大写2.跨线设置3.粘附和取消粘附4.对齐5.调整画布大小6.连接线任意位置弯折 总结 1.取消首字母自动大写 文件 -> 选项 -> 校对 -> 自动更正选项 -> 自动更正 -> 句首字母大写 2.跨线设置 选中连接线 设计 -> 连接线 -> 显示…

VISIO使用技巧汇总

0.连接线拐弯或者连接不合适 0-0.Goal ​​​​​​​ 0-1. Automatic connection 0-3.Resolvent 0-3-0.ALTF9选项,取消粘附位置调整 0-3-1.选中线段-选中中心点-shift增加直角调整合适位置

2-visio使用与卸载

目录 部分功能介绍图形拆分去除白边Visio绘制立方体,平行四边形方法不规则图形的绘制,与颜色填充visio导出PDF图,解决字母间距问题、线条变粗问题 卸载方法 部分功能介绍 图形拆分 目标:利用vision绘制一个分裂的圆。 方法:先画…

Visio使用教程

首先,根据自己需求选择自己需要的结构图,也可以新建白图通过图形自己设计 接着新建基本框图 图形生成,在模具形状里找到自己所需要的形状,点击左键不松,拖到绘图区域,松开左键即会形成一个自己所需要的形状…

visio使用记录

绘制双箭头 1、首先在电脑上打开microsoft visio 2013软件,选择任意模板进入绘图区域,如下图所示。 2、在上方开始菜单里找到【指针工具】选项,点击右侧倒三角按钮,弹出下拉菜单,在下拉菜单里找到【线条】选项&…

Visio使用

visio使用 1. 加公式2. 关于画图3. 关于流程图 1. 加公式 这个软件不知道怎么放公式,其实我那个也不算公式,主要有上下标,这里记录一下在哪改 结果 2. 关于画图 由于经常要把很多个图拼起来画,所以会先在PPT里面把图扣好&…

Visio使用技巧

线条不直:按住shift键移动线条端点小距离移动图形:按住shift键使用方向键移动图形连接线修改拐点位置:按住ctrl键移动线条中的点自制箭头:利用箭头和矩形拼成自己想要的形状,然后联合形状(在视图后面的小灯…

visio的一些使用技巧(常更)

目录 1.如何使两个图形之间的连接线变直2.添加、移动或删除形状上的连接点的方法3.绘制立方体4.如何设置连接线默认带箭头5.mathtype编写的公式乱码问题6.导出某页的图片 1.如何使两个图形之间的连接线变直 有时候我们会遇到下面这种情况,但是通过拖动图形没办法是…

visio入门基础

VISIO入门教程 1.为什么要学visio2.visio入门的三个步骤2.1.选择模板2.2.排列和连接形状3.3.添加文本 3.小练习 1.为什么要学visio 为什么要学visio,学visio有什么用?当你在写论文、写实验报告、做ppt汇报时,总是长篇大论,密密麻…