新手求助单链表实现问题
请高手帮忙看看这个关于单链表的程序有什么错误,在用vc++编译时在CreateList处总有个warning:not all control paths return a value.以下是程序:
#include"stdio.h"
#include"stdlib.h"
typedef struct node{
int elem;
struct node *next;
}Node,*Linklist;
Linklist CreateList( int n)
{ Linklist pf1,p;
int i=0;
p=(Linklist)malloc(sizeof(struct node));
p->next=NULL;
for(i=n;i>0;--i)
{ pf1=(Linklist)malloc(sizeof(struct node));
printf("请输入%d个元素值",n);
scanf("%d",pf1->elem);
pf1->next=p->next;
p->next=pf1;
return p;
}
}
Linklist ListInsert(Linklist p,int i,int e)
{ Linklist pf1,pf2;
int j=0;
pf1=p;
while(pf1 && j<i-1)
{ pf1=pf1->next;
j++;
}
if(!pf1||j>i-1)
printf("插入失败\n");
pf2=(Linklist)malloc(sizeof(struct node));
pf2->elem=e;
pf2->next=pf1->next;
pf1->next=pf2;
return p;
}
Linklist ListDelete(Linklist p,int i,int *e)
{ Linklist pf1,pf2;
int j=0;
pf1=p;
while(pf1->next&&j<i-1)
{ pf1=pf1->next;
j++;
}
if(!p->next||j>i-1)
printf("删除失败\n");
pf2=pf1->next;
pf1->next=pf2->next;
*e=pf2->elem;
free(pf2);
return p;
}
ListTraverse(Linklist p)
{ Linklist pf;
pf=p;
while(!pf)
{ printf("输出链表\n");
printf("%d",pf->elem);
pf=pf->next;
}
printf("\n");
}
main()
{ Linklist L;
int n1=0,n2=0,n3=0,m1=0,m2=0;
printf("请输入你想建立的链表长度\n");
scanf("%d",&n1);
L=CreateList(n1 );
ListTraverse(L);
printf("你想在第几个节点前插入新节点?\n");
scanf("%d",&n2);
printf("此节点的元素值是?\n");
scanf("%d",&m1);
L=ListInsert(L,n2,m1);
ListTraverse(L);
printf("你想删除第几个节点?\n");
scanf("%d",&n3);
L=ListDelete(L,n3,&m2);
printf("被删除节点的元素值是:%d",m2);
ListTraverse(L);
}
初学数据结构,写的不好,请高手请教。
[[it] 本帖最后由 xuesesu27 于 2008-3-8 22:14 编辑 [/it]]