王道上的一道题

1、设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点

答案如下

void Del_x_3(LinkList &L,ElemType x){LNode *p;if(L==NULL) return ;if(L->data==x){p=L;L=L->next;free(p);Del_x_3(L,x);}else Del_x_3(L->next,x);} 

很多同学觉得 free(p); 这条语句,该语句会造成断链

其实不会,为什么

很多同学认为这三步是这样的,如图

所以把p释放后,2和6没有连接,所以认为链断了

其实是因为没有理解清楚此处的递归

倘若第一个结点就是要删除的x的话,那么不用递归,直接删除

那么这三行代码没有问题,直接让L往后指,把p释放

但是倘若不是第一个,也就是进入else了,进入递归

注意:递归里面的L并不是当前结点,而是引用的上一层的L->next

所以L=L->next;这句代码,实际上是L->next=L->next->next;

如图

设计递归算法,删除不带头结点的单链表L中所有值为X的结点相关推荐

  1. 王道数据结构2.2.4——1、设计递归算法删除不带头结点的单链表L中所有值为x的结点

    思路 递归包含三个部分:出口.调用本身.删除操作. 代码 void del_x(LinkList &L,ElemType x){LNode *p;if(L==NULL){return;}if( ...

  2. 设计一个算法,删除一个单链表L中元素值最大的结点(假设最大值结点是唯一的)

    设计一个算法,删除一个单链表L中元素值最大的结点(假设最大值结点是唯一的). #include <stdio.h> #include<malloc.h> typedef str ...

  3. 单链表-在带头结点的单链表L中删除一个最小值结点(四指针)

    单链表的存储结构: typedef struct LinkList{int data;LinkList * next;} 分析: 要删除一个链表的最小值节点,首先想到的是肯定是要定义两个指针,但是 , ...

  4. 数据结构:假设有一个带头结点的单链表L,每个结点值由单个数字、小写字母和大写字母构成。设计一个算法将其拆分成3个带头结点的单链表L1、L2和L3,L1包含L中的所有数字结点,L2包含L中的所有小写字母

    假设有一个带头结点的单链表L,每个结点值由单个数字.小写字母和大写字母构成.设计一个算法将其拆分成3个带头结点的单链表L1.L2和L3,L1包含L中的所有数字结点,L2包含L中的所有小写字母结点,L3 ...

  5. 已知带头结点的动态单链表L中的结点是按整数值递增排列的,试写一算法将值x为的结点插入到表L中,使L仍然有序。

    创建链表,main函数中通过while循环找出该插入的位置,插入.应注意L头节点位置的变化,利用一个ptr来记录L的头节点. /*已知带头结点的动态单链表L中的结点是按整数值递增排列的,试写一算法将值 ...

  6. 单链表-删除单链表L中奇数号节点(双指针法)

    题意: 有一个带头节点的单链表L,设计一个算法,删除其中第1,3,5,7号-节点,即删除奇数号的节点. 单链表的存储结构: typedef struct LinkList{int data;LinkL ...

  7. 单链表-删除单链表L中第一个值为x的结点的前驱结点(三指针法)

    单链表的存储结构: typedef struct LinkList{int data;LinkList * next;} 分析: 首先,我们要删除第一个值为x结点的前驱结点,则该链表要包含两个及以上结 ...

  8. 单链表-删除单链表L中第一个值为x的结点(双指针法)

    单链表的存储结构: typedef struct LinkList{int data;LinkList * next;} 分析: 如果我们用一个指针p ,指向要删除的结点, 要删除第一个还好,可以删, ...

  9. 试编写在带头结点的单链表1中删除一个最小值结点的高效算法(假设最小值结点是唯一的)

    #include"initList/initList.h" #include"initList/initList.h" LinkList* del_min(Li ...

  10. 【考研】分清带头结点和不带头结点的单链表

    CSDN话题挑战赛第2期 参赛话题:学习笔记 前言 为分清带结点与不带头结点的单链表操作,本文以图文和表格形式描述了两者之间的区别.考研中,数据结构的单链表操作是重要考点,其中,比较常考带头结点的链表 ...

最新文章

  1. Visual Studio 2010构建Web浏“.NET研究”览器应用程序
  2. 第三章:创建用户界面组件--可视化组件(一)
  3. python使用matplotlib可视化堆叠的柱状图(stacked bar plot)、多个类别的数据在分类变量层面累积堆叠起来
  4. Java 常用类 -Arrays
  5. 马哥linux第六周作业
  6. Liferay 控制面板在指定文件夹添加Basic Document流程分析
  7. Android 蓝牙相关的广播
  8. [转]导出数据到Excel的几种方法
  9. MVVM架构~knockoutjs系列之扩展ajax验证~验证输入数据是否与后台数据相等
  10. [Stack]Valid Parentheses
  11. 生活在REPL中(续):在REPL中动态加载依赖的库
  12. Surface平面计算机
  13. MFC窗口之间传递数据(结构体)
  14. 在线制作流程,数据库模型,网络架构图,你所不知道的工具使用-Freedgo Design
  15. 软件测试流程(完整版)
  16. java解指派问题,运用Excel规划求解解决指派问题
  17. Illustrator CC 2019for Mac完美直装版无需破解
  18. 遥感图像计算机分类论文,遥感影像和监督分类论文,关于基于监督分类的土地利用遥感影像提取方法相关参考文献资料-免费论文范文...
  19. 计算机网络实验一:网线制作
  20. png图片格式转换器_如何将图像转换为PNG格式

热门文章

  1. CentOS 6.6安装配置LAMP服务器(Apache+PHP5+MySQL)
  2. 关于NFSv4服务共享目录里的文件UID和GID显示为nobody的解决方法
  3. 用于物联网数据收集和传输的边缘网络密钥
  4. Gephi可视化(二)——Gephi Toolkit叫板Prefuse
  5. SQL Server MYSQL 检查点的好处
  6. CSS样式表初始化杂谈
  7. 【转载】视频网站六间房将从200人减至60人裁员三分之二
  8. arg,argmin和argmax理解
  9. SAP Brazil J1BTAX 为税收例外创建税收组(翻译)
  10. Python结合selenium自动领取无忧币的脚本