#include <stdio.h>
#include <stdlib.h>
#define error 0
#define ok 1
typedef int Status;
typedef int ElemType;
typedef struct LNode
{
ElemType data;
int m;
struct LNode *next;
}LNode,*LinkList;
Status InitList( LinkList &H )
{
H = ( LinkList )malloc( sizeof( LNode ) );
H->next = H;
return ok;
}
Status CreateList( LinkList &H,int n )
{
LinkList p,q,s;
int i;
p = H;
for( i = 1;i <= n;i++ )
{
q = ( LinkList )malloc( sizeof( LNode ) );
q->data = i;
printf("µÚ %d ¸öÈ˵ÄÃÜÂëÊÇ:",i);
scanf("%d",&q->m);
q->next = p->next;
p->next = q;
p = q;
}
s = H->next;
p->next = H->next;
free(H);
H = s;
return ok;
}
Status Joseph(LinkList &H,int n,int x)
{
LinkList p,q;
int i;
while( H&&H->next->data != H->data)
{
if(x==1)
{
p = q = H;
while( p->next!=H )
p = p->next;
printf("µÚ %d ¸ö³ö¾Ö\n",p->next->data);
p->next = H->next;
H = H->next;
free(q);
continue;
}
for( i = 1;i < x%n-1;i++ )
H = H->next;
p = H->next;
printf("µÚ %d ¸ö³ö¾Ö\n",p->data);
x = p->m;
H->next = p->next;
free(p);
H = H->next;
}
if(H&&H->next->data == H->data)
{
printf("µÚ %d ¸ö³ö¾Ö\n",H->data);
}
return ok;
}
int main()
{
LNode *Head;
InitList(Head);
int num1,num2;
printf("ÇëÊäÈë×ÜÈËÊý:");
scanf("%d",&num1);
CreateList(Head,num1);
printf("µÚÒ»¸ö³ö¾ÖµÄÈË:");
scanf("%d",&num2);
Joseph(Head,num1,num2);
return 0;
}