算法:
void Dele_x(LinkList &L,int x){
LNode *p;
if(L==NULL){
return;
}
if(L->data==x){
p=L;
L=L->next;
free(p);
Dele_x(L,x);
}else{
Dele_x(L->next,x);
}
}
实现代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
void InitList(LinkList &L){
L=(LinkList)malloc(sizeof(LNode));
L=NULL;
}
void CreateList_R(LinkList &L,int n){
LNode *s,*r=L;
int x;
for(int i=0;i<n;i++){
if(L==NULL){
scanf("%d",&x);
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
s->next=NULL;
L=s;
r=s;
}else{
scanf("%d",&x);
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
s->next=NULL;
r->next=s;
r=s;
}
}
}
void printList(LinkList L){
LNode *p=L;
while(p != NULL){
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void Dele_x(LinkList &L,int x){
LNode *p;
if(L==NULL){
return;
}
if(L->data==x){
p=L;
L=L->next;
free(p);
Dele_x(L,x);
}else{
Dele_x(L->next,x);
}
}
int main(){
LinkList L;
int n,x;
InitList(L);
printf("输入单链表的结点个数:");
scanf("%d",&n);
printf("依次输入单链表的结点值,中间用空格隔开:\n");
CreateList_R(L,n);
printf("输出单链表的元素值:");
printList(L);
printf("输入要删除的元素值:");
scanf("%d",&x);
Dele_x(L,x);
printf("输出单链表剩余的元素值:");
printList(L);
return 0;
}