说明

  • 初学数据结构时,对于在链表中额外定义一个空数据的头结点不理解,不明白其优劣,认为可有可无,有时为了节省内存空间而去掉该节点,但是定义头结点是有其意义和作用的。
  • 头结点示意图:

缺点

  • 多定义了一个结点,多占用了一个结点的内存。
  • 改善方式:可以采用linux kernel中的list实现方式(结点中只包含结点指针不包含结点数据),减少头节点的内存占用。

优点

  • 单链表或双链表删除或插入节点时,如果没有头结点,处理有两种情况:
  1. 操作的对象不是第一个结点,只需要将前一个节点的next 指向后一个节点。
  2. 操作的对象是第一个结点,相对于第一种情况,由于没有前节点,所以不能按照第一种情况的方式处理,需要更改链表的头指针指向下一个节点。
  • 如果有头结点,只存在一种情况:不是第一个结点,因此按照上面第一种情况进行处理就好了,这样代码更通用,处理更简单高效。
  • 以下是无头节点单链表删除节点的示例代码:
//单链表删除结点
void deleteNode(listNode *node){listNode *head, *prev, *current;if (!head){return;    }//无头结点则需要额外做如下处理if (head == node){head = head->next;return;}prev = head;current = header->next;while (current){if (current == node){prev->next = current->next;delete current;} else {prev = current;current = current->next;}}
}
  • 以上代码看起来有头结点和没头结点的差别不大,但是实际更复杂情况下的处理会更复杂,会导致初学者理不清,加上头结点能减轻一些复杂情况下的复杂度。

链表 - 头节点的意义相关推荐

  1. 对java 链表删除节点 引用误区理解:对局部变量 cur= cur.next及cur.next=cur.next.next,及cur.next = cur.next.next.next的理解图解

    对java 链表删除节点 引用误区理解: 对java 链表删除节点 引用误区理解: 对局部变量 cur= cur.next及cur.next=cur.next.next,及cur.next = cur ...

  2. 单向链表的实现(不设立虚拟头节点)

    (希望我所描述的,给你带来收获!)--关于阅读笔者数据结构系列,建议先将代码粘至IDE,然后对照文字解释进行理解 开始抛出--什么是链表? 答:链表(Linked list)是一种常见的基础数据结构, ...

  3. php打印从1到1000,输入一个链表的头节点,从尾到头打印每个节点的值,利用PHP如何实现?...

    以下是我的实现代码(我只是打印出了每个节点): /** * Question:输入一个链表的头节点,反向打印链表节点 * Author:entner * time: 2017-7-21 * versi ...

  4. json移除一个元素_leetcode:203.移除链表元素,听说用虚拟头节点会方便很多?

    链表操作中,可以使用原链表来直接进行删除操作,也可以设置一个虚拟头结点在进行删除操作,接下来看一看哪种方式更方便. ❞ 第203题:移除链表元素 题意:删除链表中等于给定值 val 的所有节点. 思路 ...

  5. java 链表删除头结点,删除链表的倒数第N个节点,并返回链表的头节点

    面试的时候遇到了一个笔试题,是leetcode的原题,原题的连接: https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/ ...

  6. 单链表逆置 java_单链表的就地逆置--java实现(含头节点和不包含头节点)

    前沿:链表是面试中经常问道的知识点,比如链表反转,就地反转,判断单链表是否相交,判断链表是否有环等都是常问的问题.今天说一下单链表就地反转. 本文从包含头节点和不包含头节点两种链表都提供了相应的就地反 ...

  7. C语言编程题—N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。例如,若学生的成绩是:85,76,69,85,91,

    C语言编程题 设计程序,N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点.请编写函数fun,它的功能是:求出平均分,由函数值返回.例如,若学生的成绩是:85,76,69,85 ...

  8. 【LeetCode 剑指offer 06】输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。

    学习目标: 目标:熟练运用Java数据结构知识 学习内容: 本文内容:使用Java实现:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 文章目录 学习目标: 学习内容: 题目描述 ...

  9. 【C语言】单向链表排序、合并、逆序、分离(链表的头节点不储存数据)

    一.排序 编写程序,在第1题(第1题:编写程序,建立2个带头结点单链表,输入若干整数将正整数插入第1个单链表,将负整数插入第2个单链表,插入前和插入后单链表保持递增或相等次序,显示2个单链表,最后销毁 ...

最新文章

  1. CSDN-屏蔽广告详细方法 仅对谷歌浏览器有效!
  2. 【研究报告】城市云脑,智慧城市2.0产生背后的深层原因,两个重要特征是关键
  3. Dynamics CRM CE 怎样从 UCI 改为 classic UI
  4. 翻译《Writing Idiomatic Python》(五):类、上下文管理器、生成器
  5. pycharm 如何使用git链接到github实现代码提交
  6. powerbi visualization
  7. python 美化输出_python基础_格式化输出(%用法和format用法)
  8. 布局 —— 左侧固定,右侧自适应
  9. python的json dump_python中json.dump和json.dumps的区别
  10. 人行征信报告(下)——探秘二代征信的内容
  11. C# (正则表达试) 检查是否为IP地址
  12. 我们真的搞懂这些排序算法了吗?(一)
  13. 使用FileWriter向文本文件中写信息
  14. Telegram 支持删除聊天双方设备中的消息记录
  15. LINUX模拟键盘F5的脚本(未试过)
  16. Spine 3.8.75报错不能打开:Sorry, an unexpected error has occured. 日志显示Version cannot be null
  17. Hadoop集群的搭建(结束)——修改hadoop配置文件以及启动集群服务
  18. 计算机创建快捷方式w10,win10中解决无法在桌面添加快捷方式的修复方法
  19. 暗影精灵4 i5-8300H 核显驱动完美触控板声音亮度调节电池电量显示黑苹果EFI引导
  20. 糖葫芦低通滤波器的设计

热门文章

  1. python读取邮件标题_Python连载57- 邮件头和主题、解析邮件
  2. 帝国cms php序号,PHP_帝国cms常用标签汇总,判断会员是否登录? - phpStudy
  3. Python实现计算圆周率π的值到任意位的方法示例
  4. Mybatis三剑客
  5. 夏普电视显示服务器连线异常,夏普电视黑屏的原因?夏普电视常见故障!
  6. 【毕设教程】单片机RFID模块的使用 - 物联网 嵌入式 毕业设计 stm32
  7. 清明节 java_java生成12位唯一id 2013.3.12大三班清明节生成活动记录表.doc
  8. android算法实现房贷计算器
  9. Vue2(九):浏览器本地存储、组件自定义事件、TodoList自定义事件
  10. tf 设置多显卡_让显卡再次危机,《孤岛危机》重置版能否找回当年的感动