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

在本人的另一篇文章中,通过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(某些定义参考)

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

  1. 数据结构之单链表的增删查改等操作画图详解

    单链表 文章目录 单链表 链表的概念及其结构 概念 结构 链表的实现 开辟一个新结点 链表的销毁 打印链表 单链表的尾插 单链表的头插 单链表的头删 单链表的尾删 找到单链表中的一个结点 在pos位置 ...

  2. 创建单链表的头插法与尾插法详解

    创建单链表 关于数据结构的入门,就是从顺序表和单链表开始. 我们不讲顺序表,直接从单链表开始我们的数据结构和算法的学习之路. 单链表就是一种特殊的结构体组合而成的数据结构,关于单链表的创建方法有很多种 ...

  3. 单链表的头插法与尾插法详解

    创建单链表 关于数据结构的入门,就是从顺序表和单链表开始. 我们不讲顺序表,直接从单链表开始我们的数据结构和算法的学习之路. 单链表就是一种特殊的结构体组合而成的数据结构,关于单链表的创建方法有很多种 ...

  4. 单链表的头插法与尾插法详解及实现(C语言)

    单链表的建立有头插法和尾插法 首先是定义一个结构体 #include <stdio.h> #include <stdlib.h> #include <stdbool.h& ...

  5. 删除带头结点单链表中倒数第k个结点

    [问题描述] 设有头结点单链表,删除单链表中倒数第k个结点. [输入形式] 第一行重复输入整数建立带头结点的单链表,输入字符结束. 第二行输入一个整数k,表示删除倒数第k个结点. [输出形式] 输出删 ...

  6. C语言将结点s赋给表L,数据结构-单链表

    一.单链表基本定义 线性表的链式存储:线性表采用链式方式将结点链接起来的存储结构称之链表.单链表结构,分前后两个域,date数据域:存放结点的值,next指针域:存放数据元素后继的位置.附设头结点的目 ...

  7. C语言数据结构单链表链表

    数据结构–单链表 学习了顺序表,我们发现顺序表在向里面存放数据的时候很麻烦,比如我们要使用头插法存放一个数据到顺序表的时候,我们要将整个表都向后挪一位,这个操作就让人很难受.那么有没有一种结构可以让我 ...

  8. 数据结构——单链表(小白入门第二天)

    一.什么是单链表? 定义:每个结点 除了存放数据元素外,还要存储指向下一个节点的指针: 优点:不要求大片连续空间,改变容量方便: 缺点:不可随机存取,要耗费一定空间存放指针 局限性:无法逆向检索 二. ...

  9. 删除单链表中倒是第K个结点

    [问题描述] 设有头结点单链表,删除单链表中倒数第k个结点. [输入形式] 第一行输入若干个整数建立带头结点的单链表(以输入字符作为结束). 第二行输入一个整数k,表示删除倒数第k个结点. [输出形式 ...

  10. 单链表中倒数第K个结点

    单链表中倒数第K个结点 链表结点定义如下: typedef int ElemType;typedef struct Node {ElemType data; struct Node *next; }H ...

最新文章

  1. 配置网络(静态ip)
  2. Eclipse非常有用的快捷键
  3. 组件 插件 控件联系与区别
  4. 关于HTML头文件中的meta
  5. 树莓派学习——音频视频播放
  6. 【离散数学中的数据结构与算法】四 加法法则与乘法法则
  7. word把选择答案弄到题目里_word中把选择题的正确答案自动填到括号里技巧
  8. 第65课 采访报道 《小学生C++趣味编程》
  9. 如何用C++从文件读取学生成绩再求出平均成绩送回文件中
  10. 程序员是做什么的?怎么成为程序员?
  11. Processing摸索前行(8)-弹珠游戏
  12. 第三章 学习CC3200的ADC
  13. 我在创业公司的 “云原生” 之旅
  14. WPS找回未保存文档
  15. Flutter 弹幕组件hi_barrage封装
  16. 二进制视频数据常见标志位
  17. 模电笔记1:半导体基础知识
  18. 电磁场与仿真软件(13)
  19. 软碟通 ultraISO制作win10 uefi启动盘无法被电脑识别
  20. CAD图纸中,提取标注的方法是什么呢?

热门文章

  1. 用动画(animation)做弹力球
  2. 用C语言求一元二次方程的解
  3. 苹果或3月8日开新品发布会是真的吗?
  4. cad快速选择命令快捷键_CAD快捷键命令:倒角的使用技巧
  5. 【网络】什么是HTTPS证书?
  6. 推荐一本书:《人生十论》 钱穆 著
  7. Linux 内核配置项详解 myimx6
  8. ThingsBoard 规则引擎-邮件通知
  9. Qt中Qchart插件实现PMW3901迷你光流模块上位机(串口通信)
  10. php 实现我的足迹,Wordpress 实现“您的足迹”功能