递归删除链表节点

大家不要点进来看,只是自己留档,语言表达能力不行,但是我还是要发
自以为链表学得不算多好,至少也不差,直到复习看到了递归删除

void del_list(LinkList *&L, ElemType x) {
    LNode *p = (LNode *)malloc(sizeof(LNode));
    if (L == NULL) {
        return;
    }
    if (L->data == x) {
        p = L;
        L = L->next;  //精髓所在
        free(p);
        del_list(L, x);
    }
    else {
        del_list(L->next, x);
    }
}

第一眼看上去,我觉得链表是给删断了
递归删除并没有像普通删除那样,需要知道删除节点的前驱节点,然后让p->next=p->next->next
代码的精髓就在于引用,直接对地址进行操作在L=L->next的时候,直接就把被删除节点盖过去了,当然free还是要free的
例如:1、2、3、4
我们要对3进行删除,在L->data为2时,进入else传入L->next
2的next指向3,此时L是3也是2的next,因为这是引用对地址的操作
所以在L=L->next时,就变成了 2->next=3=3->next,不需要知道前驱节点,也可以直接删除

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 11,411评论 0 13
  • 有头链表(注意:头结点有的地方是全局变量) 初学者学自于大话数据结构,不足及错误的地方请读者提出来,谢谢。 可加 ...
    lxr_阅读 4,320评论 0 2
  • 搞懂单链表常见面试题 Hello 继上次的 搞懂基本排序算法,这个一星期,我总结了,我所学习和思考的单链表基础知识...
    醒着的码者阅读 10,073评论 1 45
  • 暑假即将结束,回想起来这个假期过的忙忙碌碌,但我觉得过的非常愉快,因为在互加计划中我遇到了许多优秀的老师,他们的学...
    武川二中133祁玲梅阅读 2,338评论 1 1
  • ▼ 高中穿着白裤子漏了,自己不知道的情况下,在众目睽睽之下,从教学楼前面走到了操场。想想我那背影…好醉… ▼ 第一...
    红玫瑰定律阅读 2,383评论 0 0

友情链接更多精彩内容