🕺作者: 主页
我的专栏 C语言从0到1 探秘C++ 数据结构从0到1 探秘Linux 算法题上机准备 😘欢迎 ❤️关注 👍点赞 🙌收藏 ✍️留言
题目
设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点。
算法思路
终止条件是链表为空
分支:
- 找到要删除的节点,然后找到下一个节点替换当前节点,相当于删除了
- 不是要删除的几点就继续递归下一个元素
题解
void delX(LinkedList& L, ElemType x) {
if (L == NULL) { //终止条件
return;
}
if (L->data == x) { //如果是被删除元素结点
LNode* p = L; //防止断链
L = L->next; //记录被删除元素的下一个结点,
free(p); //释放被删除元素空间
delX(L, x); //递归下一个结点
}
else { //如果当前元素的值不是被删除元素,递归下一个元素
delX(L->next, x);
}
}