一直因为非法内存访问而无法运行,能看看哪里出错吗

#include<stdio.h>
typedef struct LNode
{
int data;
LNode *next;
}LNode, *LinkList;

void creatlist(LinkList &L)
{
int N,k;
L=new LNode;
L->next=NULL;
LNode *p,*rear;
scanf("%d",&N);
scanf("%d",&k);
while(N--!=1)
{
p=new LNode;
p->data=k;
p->next=rear->next;
rear->next=p;
rear=p;
scanf("%d",&k);
}

}
void search(LinkList &L)
{
LNode *p,*q;
p=L->next;
while(p->next)
{
if(p->data%2==0)
{
q=p->next;
p->next=q->next;
delete q;
p=p->next;
}
else
p=p->next;
}
}
void sort(LinkList &L)
{
LNode *p,*q,*pre;
p=L->next->next;
L->next->next=NULL;
while(p!=NULL)
{
q=p->next;
pre=L;
while(pre->next!=NULL&&pre->next->datadata)
{
pre=pre->next;
}
p->next=pre->next;
pre->next=p;
p=q;
}
}
void print(LinkList L)
{
LNode *p=L->next;
while(p!=NULL)
{
printf("%d",p->data);
printf(",");
p=p->next;

}

}
int main()
{
LinkList L;
creatlist(L);
search(L);
sort(L);
print(L);
return 0;
}

不能运行的问题:

  1. creatlist函数里面rear没有先指向某个内存地址就直接调用rear->next,添加rear=L。
  2. search函数里面while(p->next)改成while (p&&p->next)。
    原因:要访问x->next,首先x!=NULL,也就是x要有指向的内存地址。