c语言单链表问题求大佬看看为什么可以编译运行却没反应 5

#include<stdio.h>#include<stdlib.h>#include<string.h>typedefintElementType;//定义结点type... #include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int ElementType;
//定义结点
typedef struct Node{
ElementType Data;
struct Node*Next;
}List;
int length(List*Ptrl);
List*findth(int i,List*Ptrl);
List*findbyvalue(ElementType x,List*Ptrl);
List*insert(ElementType x,int i,List*Ptrl);
List*Delete(List*Ptrl,int i);
int Length(List*Ptrl)
{
int len;
List*p;
len=0;
p=Ptrl;
while(p)
{
p=p->Next;
len++;
}
return len;
}
List*findth(int i,List*Ptrl)
{
List*p;
int cnt=0;
if(i<=0)
return NULL;
p=Ptrl;
while(p)
{
cnt++;
if(cnt==i)
{
return p;
}
p=p->Next;

}
return 0;
}
List*findbyvalue(ElementType x,List*Ptrl)
{
List*p;
p=Ptrl;
while(p)
{
if(p->Data==x)
return p;

}
}
List*insert(ElementType x,int i,List*Ptrl)
{
List*p,*pre;
pre=Ptrl;
p=(List*)malloc(sizeof(List));
p->Data=x;
if(i==1)
{p->Next=Ptrl;
return p;}
else
{
int cnt=1;
pre=Ptrl;
while(pre&&cnt<(i-1)){
pre=pre->Next;
cnt++;
}
if(pre==NULL||cnt!=i-1)
{
printf("插入位置参数错误");
free(p);
return Ptrl;
}
else{
p->Next=pre->Next;
pre->Next=p;
return Ptrl;
}
}

}
List*Delete(List*Ptrl,int i)
{
List*p,*pre;
int cnt=0;
pre=Ptrl;
while(pre&&cnt<i-1){
pre=pre->Next;
cnt++;
}
if(pre==NULL||cnt!=i-1||pre->Next==NULL)
{
printf("删除结点位置错误\n");
return -1;
}
else
{
p=pre->Next;
pre->Next==p->Next;
free(p);
return 0;
}

}

List*createtest()
{
List *head,*second,*third;
head=(List*)malloc(sizeof(List));
head->Data=100;
second=(List* )malloc(sizeof(List));
second->Data=200;
third=(List*)malloc(sizeof(List));
third->Data=300;
head->Next=&second;
second->Next=&third;
third->Next=NULL;
return head;
}

int main(int argc, char *argv[])
{
List*tst;
List*tmp;
int testlen;
tst=(List*)malloc(sizeof(List));
tst=createtest();
testlen=Length(tst);
printf("length 长度为%d",testlen);
tmp=findth(2,tst);
if(tmp)
printf("the %d numberis%d",2,tmp->Data);
else
printf("NULL...");
tmp=findbyvalue(200,tst);
printf("the value is%d",tmp);
return 0;
}
是野指针的问题吗?要怎么改。后面的插入和删除我还没使用
展开
 我来答
White_MouseYBZ
2018-10-22 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:7044万
展开全部
  1. 函数Delete的定义中,函数需返回一个List *型指针,return -1;怎能通过编译?

  2. 也是在函数Delete的定义中,pre->Next==p->Next;中的==是否应该是=?这同样过不了编译。

  3. 函数createtest的定义中,head->Next=&second;和second->Next=&third;中的=号两边的类型匹配吗?比如head->Next是List *型,也就是struct Node *型,而=右边的&second是List **型,也就是struct Node **型(second->Next=&third;存在同样的问题),这咋能通过编译?

  4. findbyvalue这个函数的定义需要返回一个List *型指针,但当if(p->Data==x)不成立时什么都没有返回,会产生执行时逻辑错误。

  5. 主函数中的tst=(List *)malloc(sizeof(List));是多余的,紧接着tst被tst=createtest();覆盖,那申请的结点成了永久垃圾,没有办法释放了。

  6. 主函数中的tmp=findbyvalue(200,tst);调用,findbyvalue中的while是死循环,因为并没有发现为p->Data赋于200的地方,所以函数永远返回不了。你说的“没反映”很可能由此造成。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式