简单小程序 求帮助啊解决思路

简单小程序 求帮助啊
#include "stdio.h"
#include "malloc.h"
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
LinkList CreatList(LinkList &la)
{
int x;
la=(LinkList)malloc(sizeof(LinkList));
scanf("%d",&x);
la->next=NULL;
LNode *s,*r=la;
while(x!=999)
{
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=NULL;
return la;
}
LNode *GetElem(LinkList L,int i)
{
int j=1;
LNode *p=L->next;
if(i<1)
return NULL;
while(p&&j<i)
{
p=p->next;
j++;
}
return p;
}
void main()
{
LinkList L;
CreatList(L);
for (int i=1;i<=5;i++)
{
L=L->next;
printf("%d",L->data);
}
int t=*GetElem(L,3)->data;这行提示出错信息://illegal indirection
printf("%d",t);
}
第一个函数是建立一个链表,输入999表示结束
第二个函数是找到第三个元素
预期结果:输入1 2 3 4 5 999
显示:12345
  3
但是为什么提示出错啊

------解决方案--------------------
for (int i=1;i<=5;i++)
{
L=L->next;
printf("%d",L->data);
}
这里L改变了。所以改成下面那样
==>
LinkList p=L;
for (int i=1;i<=5;i++)
{
p=p->next;
printf("%d",p->data);
}

------解决方案--------------------
C/C++ code
void main()
{
    LinkList L;
    LinkList p;
    CreatList(L);
    p = L;
    for (int i=1;i<=5;i++)
    {
        p=p->next;
        printf("%d",p->data);
    }
    int t=(GetElem(L,3))->data;
        printf("%d",t);
}

------解决方案--------------------
综合上面所述两种情况,你的程序就能跑对
C/C++ code

void main()
{
LinkList L;
CreatList(L);
LNode *p = L;
for (int i=1;i<=5;i++)
{
p=p->next;
printf("%d",p->data);
}
int t= GetElem(L,3)->data;    //这行提示出错信息://illegal indirection
printf("%d",t);
}