在一个递加的链表中插入一个数,插入后仍然递增。错在哪儿

在一个递增的链表中插入一个数,插入后仍然递增。错在哪儿?
  一个链表已经存在,假设输入的数中是递增的。现在插入一个数,如果这个数介于最大值和最小值之间。那么插入式正确的。但是如果这个数大于链表中最大的数,那个程序就会出错。程序直接死掉。这是怎么一回事呢?
 例如:在一个链表:1 2 3 4 5中插入7,那个程序会死掉。而插入4程序正确的输出。
#include <stdio.h>
#include <malloc.h>

typedef struct LNode{
int data;
struct LNode *next;
}LNode, * LinkList;

void maopaosort(LinkList L);

void ListCreat(LinkList L) {
int n =0;
printf("请输入结点的个数:\n");
scanf("%d",&n);
LinkList p=L;

for(int i=1;i<=n;i++,p=p->next)
{
p->next=(LinkList )malloc(sizeof(LNode) );
scanf("%d",&p->next->data);
}
p->next=NULL;
}


void ListTraver(LinkList L) {
LinkList p=L->next;

for(;p!=NULL;p=p->next)
{
printf("%d  ",p->data);
}
printf("\n");
}

void ListInsert(LinkList L, int x) {
LinkList p=L, s;
s=(LinkList )malloc(sizeof(LNode));
s->data=x;

while(p->next->data<=x&&p->next!=NULL)
p=p->next;
s->next=p->next;
p->next=s;
}

int main(void) {
LinkList L=(LinkList )malloc(sizeof(LNode) );
ListCreat(L);
ListTraver(L);
//maopaosort(L);
//ListTraver(L);
int number=0;
printf("请输入一个想要插入的数:\n");
scanf("%d",&number);
ListInsert(L,number);
printf("插入后的链表为:\n");
ListTraver(L);

return 0;
}
链表 插入 递增

------解决方案--------------------
while(p->next->data<=x&&p->next!=NULL)  这里两个条件交换过来写, 否则当p->next为空时, 你的程序就崩溃了.


------解决方案--------------------
bug

 while(p->next->data<=x&&p->next!=NULL)

当p->next == NULL,那么再访问data就是操作空指针,这情况程序直接荡掉!如果在核心里操作空指针,系统直接崩掉。使用指针务必注意的头等大事:指针不能为空,而且不能越界。