运行时,提示可执行程序停止工作,求大神指点(链表)
#include<stdio.h>#include<stdlib.h>
#define NULL 0
#define ElemType int
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
LinkList L;
int InitList_L()
{
L=(LinkList)malloc(sizeof(LNode));
if(!L)
return 0;
L->next=NULL;
return 1;
}
/*void CreateList_L(LinkList &L,int n)
{
LinkList p;
int i;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
for(i=0;i<n;i--)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",p->data);
}
p->next=L->next;
L->next=p;
}*/
int CreateList_L(LinkList &L,int n)
{
LinkList p,q;
int i;
L=(LinkList)malloc(sizeof(LNode));
q=L;
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",p->data);
q->next=p;
q=p;
p->next=NULL;
}
return 1;
}
int LinkInsert_L(LinkList &L,int i,ElemType e)
{
LinkList s,p;
int j;
p=L;j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
return 0;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return 1;
}
int ListDelete_L(LinkList &L,int i,ElemType &e)
{
LinkList q,p;
p=L;
int j=0;
while(p->next && j<i-1)
{
p=p->next;
++j;
}
if(!(p->next)||j>i-1)
return 0;
q=p->next;
p->next=q->next;
e=q->data;
free(q);
return 1;
}
void PrintList_L(LinkList &L)
{
LinkList p;
p=L->next;
while(p)
{
printf("%d",p->data);
p=p->next;
printf("\n");
}
}
void main()
{
int number,k;
//int i;
LinkList L;
printf("请依次输入5个整数:\n");
CreateList_L(L,5);
printf("请按提示,选择操作选项:\n");
printf("1 插入元素\n");
printf("2 删除元素\n");
printf("3 退出\n");
scanf("%d",&number);
switch(number)
{
case 1 :printf("选项1\n");
LinkInsert_L(L,3,9);
PrintList_L(L);
break;
case 2 :printf("选项2\n");
ListDelete_L(L,4,k);
PrintList_L(L);
break;
case 3 :printf("选项3\n");
break;
default:printf("enter data error!\n");
}
}