循环链表出圈,程序能正确运行出结果,但是提示应用程序错误,这个是什么原因啊?
程序的基本功能是建立一个单向循环链表,长度为M,从头开始数数,数到N输出该节点,并删除该节点,直到输出最后一个节点。现在能运行出结果,但是会提示应用程序错误。求高手指教,多谢!#include<stdio.h>
#include<malloc.h>
#define M 10
#define N 4
/***定义结构体***/
typedef struct Node_List
{
int num;
Node_List *next;
}node;
/***循环链表的建立***/
node *creat(void)
{
int n;
node *head=NULL;
node *p1=NULL,*p2=NULL;
for(n=1;n<=M;n++)
{
p1=(node*)malloc(sizeof(node));
p1->num=n;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
}
p1->next=head;
return head;
}
/***链表打印***/
void print(node *head)
{
node *p;
p=head;
do
{
printf("%d ",p->num);
p=p->next;
}while(p!=head);
printf("\n");
}
/***出圈***/
void out(node *head)
{
node *p;
node *q=NULL;
p=head;
int i,j=1;
while(p->next!=NULL)
{
for(i=1;i<N;i++)
{
q=p;
p=p->next;
}
printf("第%d个出圈的数为:%d\n",j++,p->num);
q->next=p->next;
free(p);
p=q->next;
}
}
main()
{
node *head;
head=creat();
print(head);
out(head);
}