循环单链表 约瑟夫环 输出问题
#include<stdio.h>#include<stdlib.h>
typedef struct node
{
int data;
//int code;
struct node * next;
}LNode,*Linklist;
void create_list(Linklist L,int n)
{
Linklist p,q;
int i;
q=L;
for(i=0;i<n;i++)
{
p=(Linklist)malloc(sizeof(LNode));
printf("data:\n");
scanf("%d",&p->data);
//printf("code:\n");
//scanf("%d",&p->code);
q->next=p;
p->next=NULL;
q=p;
}
q->next=L;
}
void chulie(Linklist L,int n)
{
Linklist p=L;
Linklist s;
//int turn ;
int start;
int m=0;
int i;
printf("please input the first code:\n");
scanf("%d",&start);
putchar(10);
if(start>n)
{
printf("Error!\n");
}
else
{
for(m=1;m<=n-1;m++)//我觉得是这里错了,但是总是到链表结尾的时候溢出,不知道哪里错了,大家给看下吧。。
{
for(i=1;i<=start-1;i++)
{
p=p->next;
}
printf("%d\n",p->next->data);
//start=p->next->code;
s=p->next;
p->next=s->next;
free(s);
}
printf("%d",p->next->data);
printf("\n");
}
/*if(m==n-1)
{
printf("剩下的是:%d",*p);
}*/
}
void print_list(Linklist L)
{
Linklist p;
p=L->next;
while(p!=L)
{
printf("%d \n",p->data);
p=p->next;
}
}
int main()
{
Linklist L;
int n;
printf("input the number of the list:\n");
scanf("%d",&n);
L=(Linklist)malloc(sizeof(LNode));
create_list(L,n);
printf("\n");
print_list(L);
chulie(L,n);
putchar(10);
return 0;
}
运行结果: