关于#链表#的问题,如何解决?

按值查找结果出不来,感谢指正

#include <stdio.h>
#include <stdlib.h>
typedef struct Node     //结构体,表示出单链表每个节点的内容,用以定义出单链表//
{
    int data;           //定义节点的数据域//
    struct Node *next;        //定义节点的指针域,该指针变量类型为结构体类型 //
}Node,*LinkList;        //结构体别名Node,定义一个指针变量LinkList指向结构体//


/*初始化单链表*/
void InitList(LinkList *L)  //*L是空链表指针变量,代表空链表,初始化的是只能是变量!不能是指针// 
{
    *L = (Node *)malloc(sizeof(Node));   //建立头节点,内存空间是节点结构体定义出的内存空间//
    (*L)->next = NULL;           //空链表//
}
/*尾插法*/
void TailInsert(LinkList L)
{
    Node *s;
    Node *r;
    char c;
    int flag = 1;
    printf("请依次输入要存入单链表的元素(以'$'结束):\n");
    r = L;
    while(flag==1)        //判断flag是否为1// 
    {
        c = getchar();
        if(c!='$')
        {
            s=(Node *)malloc(sizeof(Node));  //创建新结点// 
            s->data=c;
            r->next=s;
            r=s; 
        }
        else
        {
            flag=0;      //置flag为零// 
            r->next=NULL;
        }
    }
} 
/*按值查找*/
Node *Locate(LinkList L,char key)
{
    Node *q;
    q = L->next;     //从头结点开始遍历// 
    while(q->data!=NULL)    //表未查完// 
    {
        if(q->data!=key)
        {
            q=q->next;
        }
        else
        break;     //找到q->data=key时,跳出循环// 
    }
    return q;
} 


/*输出链表*/ 
void PrintList(LinkList L)
{
    LinkList p;
    p=L->next;
    printf("链表元素如下:\n");
    while(p!=NULL)
    {
        printf("%c",p->data);
        p=p->next;
    }
    printf("\n");
}


int main()
{
    int i;
    char key;
    LinkList L;        //建立一个空链表// 
    Node *p;          //建立新结点指针变量//
    Node *q; 
    InitList(&L);       //初始化此空链表// 
    //HeadInsert(L);
    TailInsert(L);
    PrintList(L);
    printf("请输入要查找的元素值key:",key);  //按值查找//
    key=getchar();
    q = Locate(L,key);
    printf("查找到的元素为:%c\n",q->data);
    return 0; 
}

while(q->data!=NULL)
改为
while(q !=NULL)

第47行while(q->data!=NULL) 修改为 while(q!=NULL)

感谢!