#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define LEN sizeof( struct LNode )
typedef struct LNode
{
int num; //位置
struct LNode *next;
}*LinkList;
//定义全局变量
int n;
//表示总的人数
//建立链表
void Creat_list( LinkList &L )
{
LinkList p, r;
int i = 1;
printf("输入人的总数:");
scanf("%d", &n);
p = (LinkList) malloc (LEN);
if( !p )
{
printf("没有空间可分配!\n");
return ;
}
p->num = 1;
p->next = NULL;
r = L = p;
for( i = 2; i<=n; i++ )
{
p = (LinkList) malloc (LEN);
p->num = i;
p->next = NULL;
r->next = p;
r = p;
}
r->next = L;
}
//输出链表
void Output_list( LinkList &L )
{
LinkList p = L;
int i=0;
for( ; i<n; i++ )
{
printf("%d ", p->num);
p = p->next;
}
printf("\n");
}
//进行查找 输出 数组结果
void Search_list( LinkList &L )
{
int s, m;
LinkList p = L;
int *d , i, j;
d = (int *) malloc (n*sizeof(int));
lop:printf("输入从第几个人开始数:");
scanf("%d", &s );
if( s>n )
{
printf("s 输入有误!\n");
goto lop;
}
printf("输入数几个人后出列一个人:");
scanf("%d", &m );
while( (p->num) != s )
p = p->next;
for( i = 1; i<=n-2; i++ )
{
for( j=1; j<m; j++ )
p = p->next;
*(d++) = p->next->num;
p->next = p->next->next;
p = p->next->next;
}
if( m%2 == 1 )
{
*(d++) = p->next->num;
*(d++) = p->num;
}
else
{
*(d++) = p->num;
*(d++) = p->next->num;
}
d = d-n;
for( i=0; i<n; i++ )
printf("%d ", *(d++) );
printf("\n");
}
void main()
{
LinkList L;
Creat_list( L );
Output_list( L );
Search_list( L );
}