链表在删除一个结点p时为保证不断链,需要在删除前将p的前驱与后继链接起来,即p的前驱的指针域指向p的后继的地址,若将p的前驱记作q,可表示为q->next = p->next,也即为q->next = q->next->next。所以在一般情况下,仅知道一个结点p不知道其前驱是无法完成删除操作,会导致断链。

而王道教材上所给出的代码,其之所以能够完成删除操作,本质原因正如书中所写,“L为引用,是直接对原链表进行操作”。其代码如下:

先按如下两类情况进行分类讨论,为何做此分类,下文将予以解释:

1.需删除的结点并非链表的首结点

若删除的结点并非链表的首结点,则代码的执行必然会进入else模块中的递归嵌套。

首先对else模块内的递归进行分析,其传入的参数是L->next,将递归调用中的L记作L‘,因此在执行代码L = L->next时,即L’ = L’->next由于参数L’为引用变量 ,造成的一个结果就是L->next = L->next->next,成功将L->next结点删去,即成功删去L’。

如上图所示,代码L=L->next中,由于函数参数中的引用将L与其前驱的指针域所指向的地址关联起来了(这句话为本文重点,理解了这句话,整个问题迎刃而解),因此不会导致断链。

因此可以做出如下结论,只要删除结点时使用到了else模块中参数传递,该代码能够成功执行删除操作,不会导致断链。

那么,如果代码执行过程中,删除结点并未使用到else模块中的部分,又会如何?
上述假设仅在一种情况下成立,即需删除的结点为链表的首结点。

2.需删除结点为链表首结点

若删除链表的首结点,则L=L->next的执行结果,会直接将L->next作为新的链表的首结点。首结点本就不存在前驱结点,因此不存在断链,相当于直接把第一个结点给截去。

(这排版狗看了都摇头)

2023王道数据结构P40题二.1,关于是否会断链的问题相关推荐

  1. 【2023王道数据结构】【字符串匹配算法】字符串的KMP(next数组)模式匹配算法C、C++完整实现(可直接运行)

    ~~~笔锋至此又怎能平淡而终,故事开始便不承认普通✌✌✌ ✌ 题目及题解持续更新中 [2023王道数据结构目录]课后算法设计题C.C++代码实现完整版大全 题目: 字符串的KMP(next)模式匹配算 ...

  2. 2023王道数据结构考研习题汇总

    2023王道数据结构考研复习习题汇总目录 文章目录 2023王道数据结构考研复习习题汇总目录 第2章:线性表 2.2线性表的顺序表示-综合应用题(基础题1-9) 2.2线性表的顺序表示-综合应用题(4 ...

  3. 【2023王道数据结构】【图】通过C++实现图的BFS(广度优先遍历)算法求单源最短路径问题C、C++完整实现(可直接运行)

    ~~~笔锋至此又怎能平淡而终,故事开始便不承认普通✌✌✌ ✌ 题目及题解持续更新中 [2023王道数据结构目录]课后算法设计题C.C++代码实现完整版大全 题目: 通过C++实现图的BFS(广度优先遍 ...

  4. 【2023王道数据结构】【线性表】思维拓展C、C++完整实现(可直接运行)

    ~~~笔锋至此又怎能平淡而终,故事开始便不承认普通✌✌✌ ✌ 题目及题解持续更新中 [2023王道数据结构目录]课后算法设计题C.C++代码实现完整版大全 题目: 一个长度为N的整型数组A[1-N], ...

  5. 【2023王道数据结构】【栈、队列和数组】思维拓展C、C++完整实现(可直接运行)

    ~~~笔锋至此又怎能平淡而终,故事开始便不承认普通✌✌✌ ✌ 题目及题解持续更新中 [2023王道数据结构目录]课后算法设计题C.C++代码实现完整版大全 题目: 设计一个栈,使它可以在O(1)的时间 ...

  6. 【2023王道数据结构】【串】思维拓展C、C++完整实现(可直接运行)

    ~~~笔锋至此又怎能平淡而终,故事开始便不承认普通✌✌✌ ✌ 题目及题解持续更新中 [2023王道数据结构目录]课后算法设计题C.C++代码实现完整版大全 题目: 编程实现:模式串在主串中有多少个完全 ...

  7. 【2023王道数据结构】【绪论】思维拓展-通过C++递归与非递归实现斐波那契数列C、C++完整实现(可直接运行)

    ~~~笔锋至此又怎能平淡而终,故事开始便不承认普通✌✌✌ ✌ 题目及题解持续更新中 [2023王道数据结构目录]课后算法设计题C.C++代码实现完整版大全 题目: 通过C++递归与非递归实现斐波那契数 ...

  8. 数据结构考研学习关于free是否会导致断链问题

    王道数据结构p40.二.0 设计一个递归算法,删除不带头结点的单链表L中的所有值为x的结点. 解:设f(L,x)的功能是删除以L为首结点指针的单链表中所有值等于x的结点,显然f(L->next, ...

  9. 23王道数据结构代码题全解(二)

    计划更新23王道数据结构所有课后代码习题的实现,虽然考试写的一般都是伪代码,但是强迫症的我还是全部实现了一遍,仓库在这里 代码全部是用 C++ 写的,都可以编译运行,包含暴力解和最优解. 持续更新,目 ...

最新文章

  1. VMware 主机基板管理控制器的状态
  2. B2B专线宽带业务成为企业上云新战场——Vecloud
  3. python默认参数 可变对象_当心Python函数可变默认参数(list,set,dict…)的陷阱
  4. OpenYurt 单元化部署新增 Patch 特性
  5. php设计模式的六大原则(六):迪米特法则
  6. 移动测试架构演进 | 蚂蚁金服自动化用例管理探索
  7. 企业数字化转型的加速引擎 — 2019年中国数字中台行业研究报告
  8. 使用css3属性transition实现页面滚动
  9. 怎么设置vscode界面大小_vscode怎么放大界面
  10. 在计算机系统中对文件执行彻底删除,Windows系统中,教你彻底删除C盘的顽固文件,瞬间多出10个G!...
  11. python音标1003python音标_词汇小助手V1.2——可以显示英语单词的国际音标
  12. 收藏 | 江苏省各地教师公务员等实际工资爆料
  13. python redis.exceptions.ConnectionError
  14. 甘超波:NLP潜意识和意识
  15. 『光纤交换机级联设置 』光纤跳线及光纤交换机端口级联类型
  16. 高精度数字温度传感器为基于RTD和医疗应用的设计带来简便性
  17. 制作自己的标注数据集
  18. 脉冲星 6 月脉动 | Pulsar Summit 北美峰会圆满结束,ApacheCon 议程官宣
  19. 自定义店招应该具有的基本功能
  20. 科谱|5G终端移动入库、电信入库和联通入库测试用例浅析,自3GPP

热门文章

  1. 使用svg-sprite-loader 遇到的问题
  2. DCloud之APP离线SDK升级步骤(3.5.3升至最新版3.6.7.81556_20221018)
  3. 【每日力扣10】有效的数独
  4. pandas中的freq和inferred_freq等时间参数究竟有哪些
  5. 微商城应该怎样选择?
  6. 最新解决谷歌浏览器崩溃的方法
  7. NCT全国青少年编程能力等级测试教程(图形化编程、Python语言编程)
  8. 通过直链下载google网盘里的文件
  9. linux开机启动界面异常,Linux 界面不能启动的解决
  10. ineligible devices xcode6.3