/*
题目:设计一个递归算法,删除不带头节点的单链表L中所有值为x的结点。
出自:王道p38.1
*/
//思路:题目要求使用递归,编写一个函数,功能是删除以L为首结点的单链表中所有值为x的结点,若首结点为x,删除,若首结点不为x,递归调用删除L下一个结点。
//宏定义
#define ElemType int
//单链表定义
typedef struct LNode{
ElemType val;
struct LNode*next;
}*LinkList,LNode;
[注] 上述宏定义和结构体定义是答题时要写的答案,并不是代码实现时的定义,代码实现稍有不同,感兴趣可去“help.h”中查看。
//实现函数
/*
题目:设计一个递归算法,删除不带头节点的单链表L中所有值为x的结点。
出自:王道p38.1
*/
void WD38_1(LinkList_n *L,int x){ //必须传入二级指针,C++用引用,否则断链
if(!(*L))return;
if((*L)->val==x){ //如果值为x,删掉
LNode_n*p=(*L);
(*L)=(*L)->next;
free(p);
WD38_1(L,x); //判断下一个结点,L已经后移过
}else WD38_1(&(((*L))->next),x); //判断