单链表查找运算报SIGSEGV错误

如代码 GET函数执行到while处就会报错 本人小白求大神指点

typedef struct node
{
    datatype data;
    struct node *next;
}linklist;
linklist *CREATELIST()
{
    printf("请输入您想输入的链表,$结束\n");
    char ch;
    linklist *head,*s,*r;
    head=malloc(sizeof(linklist));
    r=head;
    ch=getchar();
    while(ch!='$')
    {
        s=malloc(sizeof(linklist));
        s->data=ch;
        r->next=s;
        r=s;
        ch=getchar();
    }
    r->next=NULL;
    return head;
}
datatype GET(linklist *head,int i)
{

    int j;
    linklist *p;
    p=head;
    j=0;
    while((p->next!=NULL)&&(j<i))
    {
        p=p->next;
        j++;
    }
    if(i==j)
        return p->data;
    else return NULL;
}

https://www.bbsmax.com/A/pRdBN0Ddnx/

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^