/*设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点*/
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
//不带头结点的尾插法
LinkList CreateList(LinkList &L,int a[],int len)
{
L = (LNode*)malloc(sizeof(LNode));
L->data = a[0];
LNode *r = L;
for(int i=1;i<len;++i)
{
LNode *s = (LNode*)malloc(sizeof(LNode));
s->data = a[i];
r->next = s;
r = s;
}
r->next = NULL;
return L;
}
LinkList deleValList(LinkList &L,ElemType x)
{
LNode *p;
if(L == NULL)
return L;
if(L->data == x)
{
p = L;
L = L->next;
free(p);
deleValList(L,x);
}else
deleValList(L->next,x);
return L;
}
bool printList(LinkList L)
{
LNode *p = L;
while(p!=NULL)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
return true;
}
void main()
{
LinkList L;
ElemType a[6] = {2,1,2,3,2,5};
CreateList(L,a,6);
printList(L);
deleValList(L,2);
printList(L);
}
递归算法删除所有值为x的结点
最新推荐文章于 2023-05-11 13:10:38 发布