视频讲解在这里:
p40 第1题 王道数据结构课后代码题c语言代码实现_哔哩哔哩_bilibili
本题代码如下
void delete(linklist* L,int x)//递归删除x
{
if((*L)->next!= NULL)
{
if ((*L)->next->data == x)//找到x
{
lnode* p = (*L)->next;
(*L)->next = p->next;
free(p);
delete(&(*L), x);
}
else
{
delete(&(*L)->next, x);
}
}
}
完整测试代码
#include
#include
typedef struct lnode
{
int data;
struct lnode* next;
}lnode,*linklist;
int n = 4;
int a[4] = { 1,2,2,4 };
void buildlinklist(linklist* L)//建立单链表
{
*L = (lnode*)malloc(sizeof(lnode));
(*L)->next = NULL;
int i = 0;
lnode* s = *L, * r = *L;
for (i = 0; i < n; i++)//头插法建立单链表
{
s = (lnode*)malloc(sizeof(lnode));
s->data = a[i];
s->next = r->next;
r->next = s;
r = s;
}
r->next = NULL;
}
void delete(linklist* L,int x)//递归删除x
{
if((*L)->next!= NULL)
{
if ((*L)->next->data == x)//找到x
{
lnode* p = (*L)->next;
(*L)->next = p->next;
free(p);
delete(&(*L), x);
}
else
{
delete(&(*L)->next, x);
}
}
}
void print(linklist* L)//输出单链表
{
lnode* p = (*L)->next;
while (p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
linklist L;
buildlinklist(&L);
printf("原始链表为:");
print(&L);
delete(&L, 2);
printf("删除后的链表为:");
print(&L);
return 0;
}