求助,约瑟夫环问题,不知道哪儿错了!
问题描述:约瑟夫环问题设有n个人(编号为1,2,3 ,…… ,n),围坐一圈,现从指定的第一个人从 1 开始报数,数到第m个人时出列,然后从出列的下一个人重新开始报数,数到第m个人又出列,……,如此重复,直到剩余 1 人为止。要求:用单向循环链表实现,输出出列人的编号和最后剩余人的编号。
#include<stdio.h>
#include<malloc.h>
typedef struct LNode
{
int num;
struct LNode *next;
}LNode,*LinkList;
void Createlist_L(LinkList &L,int n)
{
int i;
LinkList p;
L=(LinkList)malloc(sizeof(LNode));
L->next=L;
for(i=n;i>0;i--)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d\n",&p->num);
p->next=L->next;
L->next=p;
}
}
void ListDelete_L(LinkList &L,int m)
{
int i;
LinkList p,q;
q=p=L;
if(q->next!=q)
{
for(i=1;i!=m;i++)
{
q=p;
p=p->next;
}
if(i==m)
{
printf("输出:\n",p->num);
p=p->next;
q->next=p;
}
}
if(q->next==q)
printf("输出:\n",q->num);
}
void main()
{
int m,n;
LinkList L;
scanf("%d\n",&n);
Createlist_L(L, n);
scanf("%d\n",&m);
ListDelete_L(L, m);
}