这个算法对于不带头结点的,如果首元结点的数据域为X的话,则无法适用。
/*设计一个递归算法,删除带头结点的单链表L中所有值为x的结点*/
#include <stdio.h>
#include <stdlib.h>
typedef struct Link{
int data;//代表数据域
struct Link* next;// 代表指针域,指向直接后继元素
}link; //link为节点名,每个结点都是一个link结构体
link* initLink(){
link * p=(link*)malloc(sizeof(link));//创建一个头结点
link * temp=p;//声明一个指针指向头结点,
//头结点的数据域内没有东西 指针域内指向第一个数据域内有东西的结点
//生成链表
for(int i=1;i<=10;i++){
link* a=(link*)malloc(sizeof(link));//每一个for循环创建一个结点
a->data=i;
a->next=NULL;//结点的指针域为空
temp->next=a;//temp结点的next为新创建的结点
temp=temp->next;//完成上一步后让最新的结点就是temp结点
}
return p;
}
void display(link* p){
link* temp=p;//将temp指针重新指向头结点
//只要temp指针指向的结点的Next不是NULL,就执行输出语句
while(temp->next){
printf("%d ",temp->data);
temp=temp->next;
}
printf("\n");
}
void Del_X_recursion(link* L,link* h,int X)
{
if(h == NULL) retu