• 这是使用递归(使用引用)进行删除节点的内存变化
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)


总的来说是因为对引用的使用不够精确的了解

参考:引用的使用

链表:递归中删除结点不发生断链相关推荐

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

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

  2. 有读者认为,直接去点p结点会造成断链

    void Del_x(Linklist &L,int x){LNode *p; if(L==NULL){return ; } if(L->data==x){p=L; L=L->ne ...

  3. 王道数据结构线性表:有读者认为直接去掉p结点会造成断链?

    王道数据结构线性表:有读者认为直接去掉p结点会造成断链? 我用图解的方式来说明一下,文字有点多,看起来比较眼疼,但是内容不多,希望能对你有帮助. 书上的代码 解释 (ps:对上面解释的一点补充↓)

  4. 关于在递归中删除链表结点不会导致链表断链的理解

    题目来自王道书:设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点.         这道题在开始看的时候是觉得很简单的,判断是否等于x,然后在L->next进行递归就是了,但是当我看 ...

  5. c语言删除结点,C语言在链表中删除结点

    /**************************************************************** 该程序实现结点的删除. 其中void *del_node(TYM * ...

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

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

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

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

  8. 数据结构,关于链表的问题,为何直接free()不会造成断链。引用的好处

    void Del_x(Linklist &L,int x){ LNode *p; if(L==NULL){return ; } if(L->data==x){ p=L; L=L-> ...

  9. 王道数据结构P40第一题,为什么直接去掉结点不会造成断链?

    void Del_X(LinkList &L,int x){LNode* p=NULL;if(L==NULL) return;if(L->data==x){p=L;L=L->nex ...

最新文章

  1. spyder上怎样将figure框出来_怎样将数据中心现有的物理机和虚拟机平滑的迁移到云平台上?...
  2. 一 梳理 从 HDFS 到 MR。
  3. 【深度学习】图像输入网络必要的处理流程
  4. python导入模块的变量_python 环境变量和import模块导入方法(详解)
  5. Mybatis和Spring集成 sessionFactory.openSession() 事务不生效问题
  6. unity 是厘米还是米_身高差45厘米! 这对重庆小情侣拍短视频晒幸福火了
  7. 获取文件的MIME类型
  8. 2 JVM 运行机制
  9. html js css如何关联_会html+css+js就能把前端项目发布到多个平台
  10. redis缓存队列+MySQL +php任务脚本定时批量入库
  11. 8数据提供什么掩膜产品_英特尔推出多款数据中心产品:继续提供差异化选项...
  12. AttributeError: 'numpy.int64' object has no attribute 'translate'
  13. 考研题目 第五章 数组和广义表
  14. 【权益证明与错误的工程学思维模式】PoS正驶向错误的方向:是在降低而不是提升质量....
  15. sql server 2008 千万条数据分页查询
  16. [百分浏览器-centbrowser]不能播放视频处理方法
  17. 计算机软件著作权登记的申请流程是什么
  18. Win11正式发布,新功能炸裂!
  19. 谷歌怒怼 iMessage 锁定 iPhone 用户,安卓用户受到同侪欺凌
  20. python分支结构说课_Python程序设计 循环结构说课稿

热门文章

  1. 【亲测好用】一站式视频录制编辑软件:Filmage Screen mac中文版
  2. flink任务优化总结
  3. android虚拟按键
  4. 使用 Springboot websocket 实现聊天室
  5. 国内首款安全三级密码卡诞生!
  6. linux dup作用,unix/linux中的dup()系统调用
  7. javascript 模拟退格键_js实现模拟计算器退格键删除文字效果的方法
  8. 如何看计算机cpu的好坏,cpu主要的性能参数有哪些、怎么看?教你几招轻松看懂CPU性能好坏...
  9. oracle批量查询更新,Oracle批量查询、删除、更新使用BULK COLLECT提高效率
  10. Who do you think is the best coder, and why?