设计递归算法,删除不带头结点的单链表L中所有值为X的结点
王道上的一道题
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的结点相关推荐
- 王道数据结构2.2.4——1、设计递归算法删除不带头结点的单链表L中所有值为x的结点
思路 递归包含三个部分:出口.调用本身.删除操作. 代码 void del_x(LinkList &L,ElemType x){LNode *p;if(L==NULL){return;}if( ...
- 设计一个算法,删除一个单链表L中元素值最大的结点(假设最大值结点是唯一的)
设计一个算法,删除一个单链表L中元素值最大的结点(假设最大值结点是唯一的). #include <stdio.h> #include<malloc.h> typedef str ...
- 单链表-在带头结点的单链表L中删除一个最小值结点(四指针)
单链表的存储结构: typedef struct LinkList{int data;LinkList * next;} 分析: 要删除一个链表的最小值节点,首先想到的是肯定是要定义两个指针,但是 , ...
- 数据结构:假设有一个带头结点的单链表L,每个结点值由单个数字、小写字母和大写字母构成。设计一个算法将其拆分成3个带头结点的单链表L1、L2和L3,L1包含L中的所有数字结点,L2包含L中的所有小写字母
假设有一个带头结点的单链表L,每个结点值由单个数字.小写字母和大写字母构成.设计一个算法将其拆分成3个带头结点的单链表L1.L2和L3,L1包含L中的所有数字结点,L2包含L中的所有小写字母结点,L3 ...
- 已知带头结点的动态单链表L中的结点是按整数值递增排列的,试写一算法将值x为的结点插入到表L中,使L仍然有序。
创建链表,main函数中通过while循环找出该插入的位置,插入.应注意L头节点位置的变化,利用一个ptr来记录L的头节点. /*已知带头结点的动态单链表L中的结点是按整数值递增排列的,试写一算法将值 ...
- 单链表-删除单链表L中奇数号节点(双指针法)
题意: 有一个带头节点的单链表L,设计一个算法,删除其中第1,3,5,7号-节点,即删除奇数号的节点. 单链表的存储结构: typedef struct LinkList{int data;LinkL ...
- 单链表-删除单链表L中第一个值为x的结点的前驱结点(三指针法)
单链表的存储结构: typedef struct LinkList{int data;LinkList * next;} 分析: 首先,我们要删除第一个值为x结点的前驱结点,则该链表要包含两个及以上结 ...
- 单链表-删除单链表L中第一个值为x的结点(双指针法)
单链表的存储结构: typedef struct LinkList{int data;LinkList * next;} 分析: 如果我们用一个指针p ,指向要删除的结点, 要删除第一个还好,可以删, ...
- 试编写在带头结点的单链表1中删除一个最小值结点的高效算法(假设最小值结点是唯一的)
#include"initList/initList.h" #include"initList/initList.h" LinkList* del_min(Li ...
- 【考研】分清带头结点和不带头结点的单链表
CSDN话题挑战赛第2期 参赛话题:学习笔记 前言 为分清带结点与不带头结点的单链表操作,本文以图文和表格形式描述了两者之间的区别.考研中,数据结构的单链表操作是重要考点,其中,比较常考带头结点的链表 ...
最新文章
- Visual Studio 2010构建Web浏“.NET研究”览器应用程序
- 第三章:创建用户界面组件--可视化组件(一)
- python使用matplotlib可视化堆叠的柱状图(stacked bar plot)、多个类别的数据在分类变量层面累积堆叠起来
- Java 常用类 -Arrays
- 马哥linux第六周作业
- Liferay 控制面板在指定文件夹添加Basic Document流程分析
- Android 蓝牙相关的广播
- [转]导出数据到Excel的几种方法
- MVVM架构~knockoutjs系列之扩展ajax验证~验证输入数据是否与后台数据相等
- [Stack]Valid Parentheses
- 生活在REPL中(续):在REPL中动态加载依赖的库
- Surface平面计算机
- MFC窗口之间传递数据(结构体)
- 在线制作流程,数据库模型,网络架构图,你所不知道的工具使用-Freedgo Design
- 软件测试流程(完整版)
- java解指派问题,运用Excel规划求解解决指派问题
- Illustrator CC 2019for Mac完美直装版无需破解
- 遥感图像计算机分类论文,遥感影像和监督分类论文,关于基于监督分类的土地利用遥感影像提取方法相关参考文献资料-免费论文范文...
- 计算机网络实验一:网线制作
- png图片格式转换器_如何将图像转换为PNG格式
热门文章
- CentOS 6.6安装配置LAMP服务器(Apache+PHP5+MySQL)
- 关于NFSv4服务共享目录里的文件UID和GID显示为nobody的解决方法
- 用于物联网数据收集和传输的边缘网络密钥
- Gephi可视化(二)——Gephi Toolkit叫板Prefuse
- SQL Server MYSQL 检查点的好处
- CSS样式表初始化杂谈
- 【转载】视频网站六间房将从200人减至60人裁员三分之二
- arg,argmin和argmax理解
- SAP Brazil J1BTAX 为税收例外创建税收组(翻译)
- Python结合selenium自动领取无忧币的脚本