C语言单链表操作问题,高手来啊

来源:百度知道 编辑:UC知道 时间:2024/04/29 00:40:15
先看看下边这个程序,通过了编译,可以运行,但是有错误。经过我自己多次调试,发现是最后1个函数ListInsert有问题,但是不知道怎么修改。。请高手帮我指出错误并修改下。。谢谢了。。。
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{ int data;
struct LNode *next;
}LinkList; /*建立单链表*/

void main()
{ LinkList *L;
LinkList *ListDelete(LinkList *L,int i);
LinkList *CreateList(LinkList *L,int n);
void Displist(LinkList *L);
LinkList *ListInsert(LinkList *L,int i,int e);
L=(LinkList *)malloc(sizeof(LinkList));

L=CreateList(L,6);
L=ListDelete(L,4);
L=ListInsert(L,3,5);
Displist(L);
}

LinkList *CreateList(LinkList *L,int n)
{
LinkList *s,*r;
int i;
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
r=L;
for(i=0;i<n;i++)
{
s=(LinkList *)malloc(sizeof(LinkList));
scanf_s("%d",&s->data);
r->next=s;
r=s;
}
r->next=NULL;

ListInsert()函数修改如下:

LinkList *ListInsert(LinkList *L,int i,int e)
{
int j=0;
LinkList *p=L,*q,*s;
while(j<i-1&&p!=NULL)
{
j++;
q=p;
p=p->next;
}
if(p==NULL)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=e;
s->next=p;
q->next=s;
}
else
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=e;
s->next=p->next;
p->next=s;
return L;
}
}

//只看了你认为有问题的函数,
if(p!=NULL) //汗一个,你的意思,如果有符合条件的插入点,就返回,如果没有就插入.......不要再说了吧 !累了,就不改了
return 0;
else
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=e;
s->next=p->next;
p->next=s;
return L;

if(p!=NULL)
return 0;
else
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=e;
s->next=p->next;
p->next=s;
return L;
}
if语句有问题哈,当p==NULL执行s=(LinkList *)mallo