单链表的基本操作(建立、查找、插入、删除)程序运行到调用函数那块就出错了,哪位大神帮我看看
#include <stdio.h>#include <malloc.h>
#include <string.h>
typedef struct linknode{
int data;
struct linknode *next;
}Link, *Links;
void Create_link(Links L,int n)
{
Link *head,*p,*q;
int i;
L=(Links)malloc(sizeof(Link));
if(!L)
return;
L->next=NULL;
head=L;
p=head;
for(i=0;i<n;i++)
{
q=(Links)malloc(sizeof(Link));
scanf("%d",&q->data);
p->next=q;
p=q;
}
p->next=NULL;
return;
}
void Get_Element(Links L,int n)
{
Link *p;
int i=0;
p=L->next;
while(p->next&&i<n-1)
{
p=p->next;
++i;
}
if(!p||i>n-1)
return;
printf("%d",p->data);
}
void Insert_list(Links L,int i,int elem)
{
Link *p, *q;
int j=0;
p=L;
while(p->next&&j<i-1)
{
p=p->next;
j++;
}
if(!p||j>i-1)
return;
q=(Links)malloc(sizeof(Link));
q->next=p->next;
p->next=q;
q->data=elem;
return;
}
void Delete_list(Links L,int i)
{
Link *p, *q;
int j;
p=L->next;
for(j=0;j<i-1;j++)
{
p=p->next;
}
if(!(p->next)||j>i-1)
return ;
q=p->next;
p->next=q->next;
return;
}
void Traverse(Links L)
{
Link *p;
p=L->next;
while(p->next!=NULL)
{
printf("%d",p->data);
}
}
int main()
{
Link L;
int num,n,i,j,elem;
char match[20];
printf("请输入链表中元素的个数及元素: \n");
scanf("%d",&num);
Create_link(&L,num);
printf("请输入操作次数: \n");
scanf("%d",&n);
printf("请选择操作(Get、Insert、Delete): \n");
while(num!=0&&n!=0)
{
for(i=0;i<n;i++)
{
scanf("%s",match);
if(!strcmp(match,"Get"))
{
printf("请输入要查找元素的位置: ");
scanf("%d",&j);
Get_Element(&L,j);
}
if(!strcmp(match,"Insert"))
{
printf("请输入要插入元素的位置及元素: ");
scanf("%d%d",&j,&elem);
Insert_list(&L,j,elem);
}
if(!strcmp(match,"Delete"))
{
printf("请输入要删除元素的位置: ");
scanf("%d",&j);
Delete_list(&L,j);
}
}
}
Traverse(&L);
return 0;
}