数据结构:单链表——带头结点与不带头结点步骤详解
单链表:带头结点与不带头结点详解
在本人的另一篇文章中,通过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(某些定义参考)
数据结构:单链表——带头结点与不带头结点步骤详解相关推荐
- 数据结构之单链表的增删查改等操作画图详解
单链表 文章目录 单链表 链表的概念及其结构 概念 结构 链表的实现 开辟一个新结点 链表的销毁 打印链表 单链表的尾插 单链表的头插 单链表的头删 单链表的尾删 找到单链表中的一个结点 在pos位置 ...
- 创建单链表的头插法与尾插法详解
创建单链表 关于数据结构的入门,就是从顺序表和单链表开始. 我们不讲顺序表,直接从单链表开始我们的数据结构和算法的学习之路. 单链表就是一种特殊的结构体组合而成的数据结构,关于单链表的创建方法有很多种 ...
- 单链表的头插法与尾插法详解
创建单链表 关于数据结构的入门,就是从顺序表和单链表开始. 我们不讲顺序表,直接从单链表开始我们的数据结构和算法的学习之路. 单链表就是一种特殊的结构体组合而成的数据结构,关于单链表的创建方法有很多种 ...
- 单链表的头插法与尾插法详解及实现(C语言)
单链表的建立有头插法和尾插法 首先是定义一个结构体 #include <stdio.h> #include <stdlib.h> #include <stdbool.h& ...
- 删除带头结点单链表中倒数第k个结点
[问题描述] 设有头结点单链表,删除单链表中倒数第k个结点. [输入形式] 第一行重复输入整数建立带头结点的单链表,输入字符结束. 第二行输入一个整数k,表示删除倒数第k个结点. [输出形式] 输出删 ...
- C语言将结点s赋给表L,数据结构-单链表
一.单链表基本定义 线性表的链式存储:线性表采用链式方式将结点链接起来的存储结构称之链表.单链表结构,分前后两个域,date数据域:存放结点的值,next指针域:存放数据元素后继的位置.附设头结点的目 ...
- C语言数据结构单链表链表
数据结构–单链表 学习了顺序表,我们发现顺序表在向里面存放数据的时候很麻烦,比如我们要使用头插法存放一个数据到顺序表的时候,我们要将整个表都向后挪一位,这个操作就让人很难受.那么有没有一种结构可以让我 ...
- 数据结构——单链表(小白入门第二天)
一.什么是单链表? 定义:每个结点 除了存放数据元素外,还要存储指向下一个节点的指针: 优点:不要求大片连续空间,改变容量方便: 缺点:不可随机存取,要耗费一定空间存放指针 局限性:无法逆向检索 二. ...
- 删除单链表中倒是第K个结点
[问题描述] 设有头结点单链表,删除单链表中倒数第k个结点. [输入形式] 第一行输入若干个整数建立带头结点的单链表(以输入字符作为结束). 第二行输入一个整数k,表示删除倒数第k个结点. [输出形式 ...
- 单链表中倒数第K个结点
单链表中倒数第K个结点 链表结点定义如下: typedef int ElemType;typedef struct Node {ElemType data; struct Node *next; }H ...
最新文章
- 配置网络(静态ip)
- Eclipse非常有用的快捷键
- 组件 插件 控件联系与区别
- 关于HTML头文件中的meta
- 树莓派学习——音频视频播放
- 【离散数学中的数据结构与算法】四 加法法则与乘法法则
- word把选择答案弄到题目里_word中把选择题的正确答案自动填到括号里技巧
- 第65课 采访报道 《小学生C++趣味编程》
- 如何用C++从文件读取学生成绩再求出平均成绩送回文件中
- 程序员是做什么的?怎么成为程序员?
- Processing摸索前行(8)-弹珠游戏
- 第三章 学习CC3200的ADC
- 我在创业公司的 “云原生” 之旅
- WPS找回未保存文档
- Flutter 弹幕组件hi_barrage封装
- 二进制视频数据常见标志位
- 模电笔记1:半导体基础知识
- 电磁场与仿真软件(13)
- 软碟通 ultraISO制作win10 uefi启动盘无法被电脑识别
- CAD图纸中,提取标注的方法是什么呢?