第1章第2节练习题1 删除指定元素
2016-01-10 18:44
288 查看
问题描述
设计一个递归算法,删除不带头节点的单链表L中所有值为x的结点。算法思想
因为题目要求使用递归的方式删除指定结点,那么我们可以先列出递归的基本模型:指针p指向要删除的结点,指针q则为要删除结点的后继结点。
递归出口:
[code] if(p==NULL){ return; }
递归主体:
[code] DelNodeX(p->next,x); DelNodeX(p,x);
因为本题中,没有设置头节点,当删除的时候必须从第一个结点开始删除,因此我们参考第1章第2节线性表的链式表示(1)中的2.5.2删除自身结点来实现该算法。但是本算法依旧存在一个较大的Bug便是当x为最后一个结点时,便会出错。
算法描述如下:
算法描述
[code]void DelNodeX(LNode *p, ElemType x) { if(p==NULL){ return; } LNode* q=p->next; if(p->data==x){ p->data=q->data; p->next=q->next; free(q); DelNodeX(p,x); }else{ DelNodeX(p->next,x); } }
具体代码见附件
附件
相关文章推荐
- 注册表的基本操作(.Net)
- 2015年个人总结
- NSFileManager(文件管理)
- Eclipse快捷键大全(转载)
- 3.1 连接与断开服务器
- codevs 2817 Tangent的愤怒
- BZOJ1066 蜥蜴
- 扫雷(BZOJ1088) 题解
- 互不侵犯(BZOJ1087) 题解
- Tower /点的移动(洛谷 1632)题解
- 序列合并(luogu 1631)题解
- 邮递员送信(luogu 1629)题解
- 敲砖块(codevs 1257)题解
- leetcode笔记:Ugly Number II
- 作业调度方案(codevs 1156)题解
- 观光公交(codevs 1139)题解
- 聪明的质监员(codevs 1138)题解
- Centos系统查询hba卡型号
- 火柴排队(codevs 3286)题解
- 寻找道路(codevs 3731)题解