单链表查找运算报SIGSEGV错误?

如代码 GET函数总是报SIGSEGV错误 小白求大神指点

#include <stdio.h>
#include <stdlib.h>
typedef char datatype;
#define maxsize 64
typedef struct
{
    datatype data[maxsize];
    int top;
}seqstack;
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(head,i)
linklist *head;
int i;
{
    int j;
    linklist *p;
    p=(linklist*)malloc(sizeof(linklist));
    p=head;
    j=0;
   while((p->next!=NULL)&&(j<i))
    {
        p=p->next;
        j++;
    }
    if(i==j)
        return p->data;
    else return NULL;
}

linklist CREATELIST()
你在函数内定义的局部变量,放在堆栈上,出了函数无效,不要直接返回,应该让主程序传入
*head,创建函数里面修改。

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

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