链表:递归中删除结点不发生断链
- 这是使用递归(使用引用)进行删除节点的内存变化
void Del_x(LinkList &L, int x) {//引用if (L == NULL) {//空结点return;}LNode *p;if (L->element == x) {p = L;printf("address of L:%p\n", &L);printf("value of L->next:%p\n", L->next);L = L->next; //L相当于L的前一个节点.nextdelete p;Del_x(L, x);}else {Del_x(L->next, x);}
}
可以看到这里,L=L->next 可以理解为将L的next的值(下个节点的地址)赋值到L地址上(这里L的地址也就是L1->next的地址)。
因为上层函数调用的是(L1->next,x),因为是引用的关系,直接L看成是L1->next就行了,那么就是L1->next=L->next,和正常的一样了
- 这是不使用递归正常的删除结点的方法
LNode *p = start->next;LNode *q = p->next;printf("address of p->next:%p\n", &(p->next));printf("value of q:%p\n", q->next);p->next = q->next;delete q;
- 这是使用递归方法的中删除节点方式,但是非递归
p = start->next;printf("address of p:%p\n", &p);printf("value of p:%p\n", p->next);p = p->next;
这里并非引用,这样做的结果只会导致,原本q地址上存放的是第二个节点的地址(start—>next)变成了第三个节点的地址(p->next)
总的来说是因为对引用的使用不够精确的了解
参考:引用的使用
链表:递归中删除结点不发生断链相关推荐
- 已知带头结点的动态单链表L中的结点是按整数值递增排列的,试写一算法将值x为的结点插入到表L中,使L仍然有序。
创建链表,main函数中通过while循环找出该插入的位置,插入.应注意L头节点位置的变化,利用一个ptr来记录L的头节点. /*已知带头结点的动态单链表L中的结点是按整数值递增排列的,试写一算法将值 ...
- 有读者认为,直接去点p结点会造成断链
void Del_x(Linklist &L,int x){LNode *p; if(L==NULL){return ; } if(L->data==x){p=L; L=L->ne ...
- 王道数据结构线性表:有读者认为直接去掉p结点会造成断链?
王道数据结构线性表:有读者认为直接去掉p结点会造成断链? 我用图解的方式来说明一下,文字有点多,看起来比较眼疼,但是内容不多,希望能对你有帮助. 书上的代码 解释 (ps:对上面解释的一点补充↓)
- 关于在递归中删除链表结点不会导致链表断链的理解
题目来自王道书:设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点. 这道题在开始看的时候是觉得很简单的,判断是否等于x,然后在L->next进行递归就是了,但是当我看 ...
- c语言删除结点,C语言在链表中删除结点
/**************************************************************** 该程序实现结点的删除. 其中void *del_node(TYM * ...
- 单链表-在带头结点的单链表L中删除一个最小值结点(四指针)
单链表的存储结构: typedef struct LinkList{int data;LinkList * next;} 分析: 要删除一个链表的最小值节点,首先想到的是肯定是要定义两个指针,但是 , ...
- 试编写在带头结点的单链表1中删除一个最小值结点的高效算法(假设最小值结点是唯一的)
#include"initList/initList.h" #include"initList/initList.h" LinkList* del_min(Li ...
- 数据结构,关于链表的问题,为何直接free()不会造成断链。引用的好处
void Del_x(Linklist &L,int x){ LNode *p; if(L==NULL){return ; } if(L->data==x){ p=L; L=L-> ...
- 王道数据结构P40第一题,为什么直接去掉结点不会造成断链?
void Del_X(LinkList &L,int x){LNode* p=NULL;if(L==NULL) return;if(L->data==x){p=L;L=L->nex ...
最新文章
- spyder上怎样将figure框出来_怎样将数据中心现有的物理机和虚拟机平滑的迁移到云平台上?...
- 一 梳理 从 HDFS 到 MR。
- 【深度学习】图像输入网络必要的处理流程
- python导入模块的变量_python 环境变量和import模块导入方法(详解)
- Mybatis和Spring集成 sessionFactory.openSession() 事务不生效问题
- unity 是厘米还是米_身高差45厘米! 这对重庆小情侣拍短视频晒幸福火了
- 获取文件的MIME类型
- 2 JVM 运行机制
- html js css如何关联_会html+css+js就能把前端项目发布到多个平台
- redis缓存队列+MySQL +php任务脚本定时批量入库
- 8数据提供什么掩膜产品_英特尔推出多款数据中心产品:继续提供差异化选项...
- AttributeError: 'numpy.int64' object has no attribute 'translate'
- 考研题目 第五章 数组和广义表
- 【权益证明与错误的工程学思维模式】PoS正驶向错误的方向:是在降低而不是提升质量....
- sql server 2008 千万条数据分页查询
- [百分浏览器-centbrowser]不能播放视频处理方法
- 计算机软件著作权登记的申请流程是什么
- Win11正式发布,新功能炸裂!
- 谷歌怒怼 iMessage 锁定 iPhone 用户,安卓用户受到同侪欺凌
- python分支结构说课_Python程序设计 循环结构说课稿
热门文章
- 【亲测好用】一站式视频录制编辑软件:Filmage Screen mac中文版
- flink任务优化总结
- android虚拟按键
- 使用 Springboot websocket 实现聊天室
- 国内首款安全三级密码卡诞生!
- linux dup作用,unix/linux中的dup()系统调用
- javascript 模拟退格键_js实现模拟计算器退格键删除文字效果的方法
- 如何看计算机cpu的好坏,cpu主要的性能参数有哪些、怎么看?教你几招轻松看懂CPU性能好坏...
- oracle批量查询更新,Oracle批量查询、删除、更新使用BULK COLLECT提高效率
- Who do you think is the best coder, and why?