尾插法建表显示错误,请问应该怎么改?

//尾插法建表
int CreateListR(LinkList L)
{
int i,n;
LinkList *s,*q,*p;
p=L;
while(p->next!=NULL)
{
p=p->next;
}
printf("请输入需要录入的图书信息的个数:n=");
scanf("%d",&n);
for(i=1;i<n+1;i++)
{
s=(LinkList
)malloc(sizeof(LinkList));
printf("书号 书名 价格\n");
scanf("%s%s%s",&s->data.ISBN,&s->data.name,&s->data.price);
q=L->next;
if(q==NULL){
p->next=s;
p=s;
p->next=NULL;
printf("录入成功!\n");
continue;
}
while(q!=NULL)
{
if(strcmp(s->data.name,q->data.name)==0){
printf("此图书已存在!");
printf("请重新输入:\n");
scanf("%s%s%s",&s->data.ISBN,&s->data.name,&s->data.price);
}
q=q->next;
}
p->next=s;
p=s;
p->next=NULL;
printf("录入成功!\n");
}
return 0;
}

错误:
:\数据\的\VC.CPP(30) : error C2227: left of '->next' must point to class/struct/union
D:\数据\的\VC.CPP(30) : fatal error C1903: unable to recover from previous error(s); stopping compilation

请问怎么改

问题解决的话,请点下采纳

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct
{
    char ISBN[50];
    char name[50];
    char price[50];
} Data;

typedef struct Node
{
    Data data;
    Node * next;
}LinkList;
int CreateListR(LinkList *L)
{
    int i,n;
    LinkList *s,*q,*p;
    p=L;
    while(p->next!=NULL)
    {
        p=p->next;
    }
    printf("请输入需要录入的图书信息的个数:n=");
    scanf("%d",&n);
    for(i=1;i<n+1;i++)
    {
        s=(LinkList *)malloc(sizeof(LinkList));
        printf("书号 书名 价格\n");
        scanf("%s%s%s",&s->data.ISBN,&s->data.name,&s->data.price);
        q=L->next;
        if(q==NULL){
            p->next=s;
            p=s;
            p->next=NULL;
            printf("录入成功!\n");
            continue;
        }
        while(q!=NULL)
        {
            if(strcmp(s->data.name,q->data.name)==0){
                printf("此图书已存在!");
                printf("请重新输入:\n");
                scanf("%s%s%s",&s->data.ISBN,&s->data.name,&s->data.price);
            }
            q=q->next;
        }
        p->next=s;
        p=s;
        p->next=NULL;
        printf("录入成功!\n");
    }
    return 0;
}

int main()
{
    LinkList l;
    l.next = NULL;
    CreateListR(&l);
    Node * p = &l->next;
    while (p)
    {
        printf("%s %s %s\n", p->data.ISBN, p->data.name, p->data.price);
        p = p->next;
    }
    return 0;
}