基本知识点

注:数据结构系列将持续更新,欢迎交流讨论…

  1. 单向链表是一种线性结构
  2. 优点:作数据的删除、插入简单;缺点:数据查找慢
  3. 组成:数据域、后继节点的一个指针域;
  4. 单向链表,后继指针指向下一个结点
  5. 学数据结构的建议:学习每种结构的时候,首先得清除它的结构,所以自己首先要清楚大概的结构,自己画一画;文中我会展示出部分图片以供参考。
基本结构示意图

一般实现步骤
  1. 初始化结点参数/创建结点;
  2. 链接每个结点,让这些结点成为一个逻辑上相连接的链表;
  3. 注意点:指针的先后指向要捋清楚,谁先指,谁后指;
  4. 建议:学编程就是学的一种思维,有的问题可以不必深究;
简单的代码实现链表逻辑
typedef struct node//用typedef就可以在后面起别名
{int num;struct node* next;
}*p_node;//别名void testList()
{node data_1 = { 1,nullptr };node data_2 = { 2,nullptr };node data_3 = { 3,nullptr };node data_4 = { 4.nullptr };data_1.next = &data_2;data_2.next = &data_3;data_3.next = data_4;node* pMove = &data_1;while (pMove != nullptr){cout << pMove->num << " ";pMove = pMove->next;}
  • 上图展示的就是基本操作,创建结点和链接,打印,接下来我们只需要用函数将他封装一下,简单的实现一下增删改查的功能,就算是实现好了一个最基本的单向链表;
封装初始化结点函数
node* initnode(int value)
{p_node newnode = new node;newnode->num = value;newnode->next = nullptr;return newnode;
}
头插法插入节点
void insertHead(node* p_head, node* data)
{data->next = p_head->next;p_head->next = data;
}

插入过程示意图

尾插法
void insertTail(node* p_tail, p_node data)
{data->next = p_tail->next;p_tail->next = data;
}

插入过程示意图

查找和修改数据

(这个没什么好说的,看代码)

bool search(p_node pHead, int target, int value)
{p_node pMove = pHead;while (pMove != nullptr){if (pMove->num == target){pMove->num = value;return true;}pMove = pMove->next;}return false;
}

删除结点

  • 删除一个结点需要两个结点,一个指向当前结点,一个指向当前结点左侧,这样的目的是为了作结点删除时方便结点直接的链接;
  • 删除过程:左侧结点断开当前结点的链接,去链接当前结点的右侧结点,如图所示:
bool deleteNode(p_node pHead,int target)
{p_node pMove = pHead;p_node pLight = pHead;while (pMove != nullptr){if (pMove->num == target){pLight->next = pMove->next;delete pMove;pMove = nullptr;return true;}pLight = pMove;pMove = pMove->next;}return false;
}

删除过程指针移动示意图

注意点:要始终保持pLight结点在pMove结点的左侧,这样删除的时候好作结点之间的链接。

结语

数据结构的内容将持续更新,如文中有误还请不吝赐教;欢迎评论区留言或私信讨论。

数据结构入门——单向链表相关推荐

  1. 数据结构 (二) ----- 单向链表双向链表

    相关文章: <数据结构 (一) ----- 数据结构基本概念&基于数组实现线性表> <数据结构 (二) ----- 单向链表&双向链表> 文章目录 单链表 一. ...

  2. Java版数据结构之单向链表 新增,有序新增的两种方式,修改和删除(CRUD)

    Java版数据结构之单向链表 CRUD Java版数据结构之单向链表 新增,有序新增的两种方式,修改和删除; 留了一个疑问; 我的代码仓库:https://github.com/zhuangbinan ...

  3. Java版数据结构之单向链表

    Java版数据结构之单向链表 我的代码仓库:https://github.com/zhuangbinan/datastructure package club.zhuangbinan.linkedli ...

  4. 算法与数据结构(part6)--单向链表

    学习笔记,仅供参考,有错必纠 参考自:单链表头指针.头结点.头元结的辨析 文章目录 算法与数据结构–基于python 链表 为啥需要链表 什么是链表 单向链表 什么是单向链表 单列表的操作 节点的实现 ...

  5. Day 62 数据结构(单向链表,单向循环链表,双向链表)

    1. 单向链表的设计 例程:创建一个动态单向链表 1.定义链表结点:数据域+指针域 2.定义链表结构体:头结点指针+结点数 3.初始化链表 4.指定位置插入新数据 5.删除指定位置数据 6.获取链表长 ...

  6. 数据结构——求单向链表的倒数第K个节点

    首先,对于链表来说,我们不能像数组一样直接访问,所以我们想到要求倒数第K个节点首先要知道最后一个节点. 然后从最后一个节点往前数K个. 最后得到想要的值. 但是这是不对的,为什么呢?因为题目给出的是单 ...

  7. php mysql 链表_php实现数据结构的单向链表

    啥是单向链表 链表是以链式存储数据的结构,其不需要连续的存储空间,链表中的数据以节点来表示,每个节点由元素(存储数据)和指针(指向后继节点)组成. 单向链表(也叫单链表)是链表中最简单的一种形式,每个 ...

  8. 数据结构:单向链表(SingleLinkedList)删除某一节点

    定义一个简单的单向链表节点 public class ListNode {int value;ListNode next;ListNode(int x) { val = x;} } 思路一 //将前一 ...

  9. 【数据结构】单向链表的原理及实现

    1.什么是单链表 链表里的数据是以节点的方式表示的,每一个结点的组成是由:元素+指针来组成的,元素就是存储数据里的存储单元,指针就是用来连接每一个结点的地址数据.这个以结点的序列来表示线性表被称作为单 ...

最新文章

  1. C++插入中文到mysql乱码
  2. jflash烧录教程_Jflash烧录(windows)原理分析
  3. IPC的标准是什么?
  4. 专精特新是什么,为什么要申报“专精特新”中小企业
  5. 质谱流式细胞技术 小笔记
  6. 计算机触摸板设置方法,笔记本电脑触摸板设置
  7. 一级域名和二级域名的区别
  8. Win10任务栏卡死解决方法
  9. 民法典实施后,夫妻共同债务如何认定?
  10. 分层强化学习:基于选项(option)的强化学习/论文笔记 The Option-Critic Architecture 2017 AAAI
  11. 正则表达式--文本处理神器
  12. 软件测试之项目实战,必须知道的事与测试面试项目测试流程......
  13. 敏俊物联MJIOT-AMB-03 RTL8710BN 高性能wifi模块
  14. 关闭Windows系统中的UAC用户帐户控制
  15. 电路+模电+电力电子基础
  16. “问渠哪得清如许?为有源头活水来” – 提高技术源头数据的质量成为技术信息化热点
  17. docker-compose模板指令 命令行指令
  18. C语言刷题训练营-自我补全
  19. 西交大卢院士、方学伟团队:钛纤维增强铝基复合材料增材制造技术研究
  20. Git 中 tag 的用法(打tag、删除tag等)

热门文章

  1. 鼠标光标无法在字母或数字间移动
  2. 用python实现pageRank算法
  3. linux+笔记:linux下判断一个文件或者目录是否存在
  4. 隐藏和显示div的两种方法
  5. vue,按钮控制div显示与隐藏
  6. react style 设置背景图片
  7. 2019国产数据库大盘点
  8. 建筑效果图素材站SKALGUBBAR
  9. NNI(自动超参数搜索)工具环境配置及使用
  10. 支付: 一文搞懂62个支付名词 (3)