第一题(链表中递归删除元素x)
#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>
typedef int Elemtype;
typedef struct LNode
{
Elemtype data;
struct LNode *next;
} LNode,*LinkList;
void Delete_x(LNode *P,LNode *C,Elemtype e)
{
if(C==NULL)return;
if(C->data==e)
{
P->next=C->next;
free(C);
Delete_x(P,P->next,e);
}
else
{
Delete_x(C,C->next,e);
}
}
LinkList List_TailInsert(LinkList L)
{
int x;
L=(LinkList)malloc(sizeof(LinkList));
LNode *r=L,*s;
scanf("%d",&x);
while(x!=9999)
{
s=(LNode*)malloc(sizeof(LNode*));
s->data=x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=NULL;
return L;
}
void PrintLinkList(LinkList L)
{
printf("打印链表\n");
LNode *r=L->next;
while(r!=NULL)
{
printf("%d--->",r->data);
r=r->next;
}
printf("\n");
}
int main()
{
LinkList L;
printf("创建链表,输入链表的值 9999表示结束!\n");
L=List_TailInsert(L);
PrintLinkList(L);
printf("请输入删除指定元素:");
int x;
scanf("%d",&x);
Delete_x(L,L->next,x);
PrintLinkList(L);
return 0;
}
第二题(删除链表中值为x的结点)
#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>
typedef int Elemtype;
typedef struct LNode
{
Elemtype data;
struct LNode *next;
} LNode,*LinkList;
void Delete_x(LinkList L,Elemtype e)
{
LNode *p=L->next,*prv=L,*q;
while(p!=NULL)
{
if(p->data==e)
{
q=p;
p=p->next;
prv->next=p;
free(q);
}
else
{
prv=prv->next;
p=p->next;
}
}
}
LinkList List_TailInsert(LinkList L)
{
int x;
L=(LinkList)malloc(sizeof(LinkList));
L->next=NULL;
LNode *r=L,*s;
scanf("%d",&x);
while(x!=9999)
{
s=(LNode*)malloc(sizeof(LNode*));
s->data=x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=NULL;
return L;
}
void PrintLinkList(LinkList L)
{
printf("打印链表\n");
LNode *r=L->next;
while(r!=NULL)
{
printf("%d--->",r->data);
r=r->next;
}
printf("\n");
}
int main()
{
LinkList L;
printf("创建链表,输入链表的值 9999表示结束!\n");
L=List_TailInsert(L);
PrintLinkList(L);
printf("请输入删除指定元素:");
int x;
scanf("%d",&x);
Delete_x(L,x);
PrintLinkList(L);
return 0;
}