@数据结构大神,单链表的插入,56行怎么错了?求解释~

include

include

typedef struct Node
{
char data;
struct Node *next;
}Node,*Linklist;//先定义、后使用

//定义数据L-分配头节点-插入数据,连-接-返回
Linklist Createfromhead()
{
Linklist L;Node*s;int flag=1;char c;
L=(Linklist)malloc(sizeof(Node));
L->next=NULL;

while(flag)
{
 c=getchar();
 if(c!='$')
 {
    s=(Node*)malloc(sizeof(Node));
    s->data=c;
    s->next=L->next;
    L->next=s;
 }
 else
 flag=0;
}


do{
    printf("%c ",L->data);
    L=L->next ;
}while(L!=NULL); //打印插入后的链表(反序打印) 


return L;

}

int insert(Linklist L,char e,int k)
{
Node r;Linklist pre=L;int i=0;//输入e插入的字母,k所在的位数,说明pre指向头节点
//给链表+分配空间,不用给数据
pre=(Node
)malloc(sizeof(Node));

while(i<k-1)//(pre->next!=NULL)&&情况不用 
 {pre=pre->next;i++;}//寻找插入的前驱结点pre 

// if(k!=i-1) 由于 pre->next!=NULL退出 (链表不够长)
// return 0; 情况不用

r=(Linklist)malloc(sizeof(Node));
r->data=e;
r->next=pre->next;pre->next=r;//插入新的节点 
return 1; 

}

int main()
{
char e;int k;Linklist L;

Createfromhead();

printf("\ninput k e\n");
scanf("%d %c",&k,&e);
printf("\n%d,%c\n",k,e);//对k,e输入输出

if(insert(L,e,k)==0) printf("wrong");
else
{do{
printf("%c ",L->data);
L=L->next ;
}while(L!=NULL);//打印插入后的链表(反序打印)
}

getch();
return 0;
}

图片说明

 int insert(Linklist L,char e,int k)
{
Node r;          //应该是Node *r;   或者Linklist r;

 pre=(Node)malloc(sizeof(Node));//这也不对,应该: pre=(Linklist)malloc(sizeof(Node));

 r=(Linklist)malloc(sizeof(Node));