有大佬知道这是什么原因么?
你能不能将代码贴出来,你截图这样别人也运行不了你的代码呀~,总不能看着图一个一个敲吧
你这个L指针有问题,是空的,你main中后面应该用stu指针才行。如果想让L有效,那么createfromhead的参数要用 linklist *L
int main(void)
{
linklist L,stu;
stu = createfromhead(L);
int x;
scanf("%d",&x);
Rdelete(stu,x);
printf(stu);
}
代码没问题呀,编译代码通过,测试如下
/**************************************************
设计一个递归算法,删除不带头结点的单链表L中所有为x的结点
***************************************************/
#include<stdio.h>
#include<stdlib.h>//molloc函数free函数要用到的库函数
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*linklist;
linklist createfromhead(LNode *L);
void Rdelete(LNode *L,int x);
void print(LNode *L);
int main(void)
{
linklist L,stu;
stu=createfromhead(L);
int x;
printf("请输入要删除的值: \n");
scanf("%d",&x);
Rdelete(L,x);
print(L);
}
void Rdelete(LNode *L,int x)//递归按值删除
{
LNode *p;
if(L==NULL)
{
printf("所要插入的链表不合法");
return;
}
if(L->data==x)
{
p=L;
L=L->next;
free(p);
Rdelete(L,x);
}
else
{
Rdelete(L->next,x);
}
}
linklist createfromhead(LNode *L)//头插法
{
LNode *s;
int flag = 1,c;
L=NULL;
while(flag)
{
scanf("%d",&c);
if(c!=-1)
{
s=(linklist)malloc(sizeof(LNode));
s->data=c;
s->next=L;
L=s;
}
else
{
flag=0;
}
}
return L;
}
void print(LNode *L)//递归打印
{
printf("%d",L->data);
L=L->next;
print(L);
}
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632