python 链表中头结点的含义以及引入头结点的作用

article/2025/11/9 2:36:15

一、概念

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

头指针:是指向第一个结点的指针,如果链表没有引入头结点,那么头指针指向链表的第一个结点。头指针是链表所必需的。

[注意]有头结点,头指针指向头结点;没有头结点,头指针指向链表第一个结点,如果链表为空,头指针为NULL

二、为何引入头结点

  1. 防止头指针为NULL,有头结点,头指针始终指向头结点,那么无论链表是否为空,头指针均不为空;没有头结点,头指针就为NULL

  2. 插入/删除第一个结点时不需要修改头指针,只需要改变 头结点.next

  3. 有头结点时,插入/删除第一个结点时,空链表/非空链表操作逻辑一致,不需要额外判断

 

带头结点的单链表

 

不带头结点的单链表 

三、单链表的创建(带头结点和不带头结点两种实现方式)

下面代码中头插法的两种实现方式可以佐证标题二中2、3两点,带头结点时不需要修改头指针,且空链表/非空链表的插入逻辑一致

if __name__ == '__main__':# 初始化链表class Node:def __init__(self, item):self.item = itemself.next = None# 链表的创建# 头插法:不使用头结点def create_linklist_head(li):if li == []:return Nonehead = Node(li[0])  # 链表为空时,头指针指向第一个结点for element in li[1:]:  # 链表不为空时,要插入的结点.next指向头指针的结点,再修改头指针为新插入的结点node = Node(element)node.next = headhead = node  # 头指针不断移动return head# 链表的创建# 头插法:使用头结点def create_linklist_head2(li):head = Node(None)  # 头结点for element in li:node = Node(element)node.next = head.nexthead.next = nodereturn head.next# 尾插法:不使用头结点def create_linklidt_tail(li):if li == []:return Nonehead = Node(li[0])  # 链表为空时,头指针指向第一个结点tail = head  # 尾指针指向同一个内存地址for element in li[1:]:  # 链表不为空时,尾结点.next指向新插入的结点,尾指针指向新插入的结点node = Node(element)tail.next = nodetail = node  # 尾指针不断移动return head# 尾插法:使用头结点def create_linklidt_tail2(li):head = Node(None)  # 头结点tail = head  # 尾指针指向同一个内存地址for element in li:node = Node(element)tail.next = nodetail = node  # 尾指针不断移动return head.next# 遍历输出链表:def print_linklist(li):while li:print(li.item, end=',')li = li.nextprint(end='\n')li = create_linklist_head([1, 2, 3, 6, 8])print("不带头结点-头插法:")print_linklist(li)li2 = create_linklist_head2([1, 2, 3, 6, 8])print("带头结点-头插法:")print_linklist(li2)lk = create_linklidt_tail([1, 2, 3, 6, 8])print("不带头结点-尾插法:")print_linklist(lk)lk2 = create_linklidt_tail2([1, 2, 3, 6, 8])print("带头结点-尾插法:")print_linklist(lk2)

参考文章:

头结点的含义以及引入头结点的作用_snow_7的博客-CSDN博客_头结点


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

相关文章

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

如果不想看定义的话,可以看我的第二部分,里面有我自己遇到的一些疑难。 下文中出现的有关于java的,也有c语言的指针(可以看成java的引用变量),觉得写得不好,多多包涵 目录 (一)…

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

一、概念 头结点:是虚拟出来的一个节点,不保存数据。头结点的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.如何使两个图形之间的连接线变直 有时候我们会遇到下面这种情况,但是通过拖动图形没办法是…