假设有N个人决定选出一个领导人,方法如下:所有人排成一圈,按顺序数数,每隔第M的人出局,直到找出最后一个人。
#include
#include
#include
typedef struct NODE {
struct NODE *next;
int item;
}inode,*link;
main(int argc,char *argv[])
{
int i;
int N=atoi(argv[1]);
int M = atoi(argv[2]);
link t =(inode *) malloc(sizeof(*t));\
if(t == NULL)
printf("malloc error\n");
link x = t;
link p;
t->item = 1;
t->next = t;//创建一个代表1号的单节点的循环链表
for(i = 2;i <= N; i++)
{
x=x->next= (inode *)malloc(sizeof (inode));//x为要添加的节点
if(x == NULL)
printf("malloc error\n");
x->item = i;
x->next = t;
}
while(x != x->next)
{
for(i = 1;i < M;i++)x=x->next;
p=x->next;
x->next =x ->next->next;
free(p);
}
printf("%d\n",x->item);
}