单链表分割为三个循环链表问题,代码运行失败

#include<stdio.h>
#include<stdlib.h>
typedef struct node//构建结构体变量
{
char data;
struct node *next;
}Lnode,*Linklist;
void Init(Linklist *L) //初始化链表
{
*L=(Linklist)malloc(sizeof(Lnode));
(*L)->next=NULL;
}
void CreatFromHead(Linklist L)//头插法创建链表
{
Lnode *s;
char c;
int flag=1;
while(flag)
{
scanf("%c",&c);//输入元素
if(c!='\n')
{
s=(Linklist)malloc(sizeof(Lnode));
s->data=c;
s->next=L->next;
L->next=s;
}
else
flag=0;
}
}
void fenge(Linklist L,Linklist Q,Linklist R,Linklist M)//将三种数据元素分隔开
{
Lnode *p,*q,*r,*s;
s=L->next;
p=Q->next;
q=Q->next;
r=M->next;
while(s)
{
if(0<=s->data&&s->data<=9)
{
p->next=s;
p=s;
}
else if('a'<=s->data&&s->data<='z'||'A'<=s->data&&s->data<='Z')
{
q->next=s;
q=s;
}
else
{
r->next;
r=s;
}
s=s->next;
}
p->next=Q;//组成循环链表
q->next=R;
r->next=M;
}
void Print(Linklist L)//输出链表元素
{
Lnode *r;
r=L;
L=L->next;
while(L->next!=r)
{
printf("%c ",L->data);
L=L->next;
}
}
int main()
{
Linklist l,q,r,w;
Init(&l), Init(&q), Init(&r), Init(&w);
printf("输入字符串为:\n");
CreatFromHead(l);
fenge(l,q,r,w);
printf("数字字符表为:\n");
Print(q);
printf("符号字符表为:\n");
Print(r);
printf("其他字符表为:\n");
Print(w);
return 0;
}