求查此程序在最后为什么会执行错误
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{int data;
struct LNode *next;
}Lnode,*Linklist;
Linklist creat(int m)
{
int i;
Linklist L,p,h;
L = (Linklist)malloc(sizeof(Lnode));
h = L;
for(i = 1;i <= m;i ++)
{
p = (Linklist)malloc(sizeof(Lnode));
p -> data = i;
h -> next = p;
h = p;
}
h -> next = L -> next;
p = h -> next;
return L;
}
void Delete(int m,int s,int n,Linklist L)
{
int i;
Linklist p,h,q;
p = L;
if(m < 1)
{
printf("Game Can not Carry On.\n");
}
else{
for(i = 1;i < s;i ++)
{
p = p -> next;
}
while(p)
{
for(i = 1;i < n;i++)
{
p = p -> next;
}
q = p -> next;
printf("%d ",p -> next -> data);
p -> next = p -> next -> next;
free(q);
m --;
}
}
/*if(m < 1)
{
printf("Game Can Not Carry On.\n");
}
if(m)
{
for(i = 1;i < s;i ++)
{
p = p -> next;
}
}
while(m)
{
for(i = 1;i < n;i ++)
{
p = p -> next;
}
q = p -> next;
printf("%d ",p -> next -> data);
p -> next = p -> next ->next;
free(q);
m--;
}*/
}
void main(){
int m,n,s;
Linklist L,p,h;
printf("请依次输入m,n,s\n");
printf("m = ");
scanf("%d",&m);
printf("n = ");
scanf("%d",&n);
printf("s = ");
scanf("%d",&s);
L = creat(m);
Delete(m,s,n,L);
printf("\nGame Over.\n");
}
[解决办法]