约瑟夫环
代码
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node *next;
}node;
node *create(int n)
{
node *p = NULL,*head; //p总是指向当前结点
head = (node*)malloc(sizeof (node));
p = head;
node *s;//指向临时插入结点 s
int i = 1;
if( i!=0 )
{
while( i<=n )
{ s = (node *)malloc(sizeof (node));
s -> data = i++;
p -> next = s;
p = s;
}
s -> next = head -> next;//s的下一个结点是第一个结点而非头节点
}
free (head);
return s -> next;
}
int main()
{
int n = 41;
int m = 3;
node *p = create(n); //p为首结点地址
node *temp;
m %= n;//m=2
while(p != p->next )
{
for(int i = 1;i < m-1;i++)
{
p = p->next;
}
printf("%d -> ",p->next->data);//打印出结点
temp = p->next;//删除该结点
p -> next = temp -> next;
free(temp);
p = p -> next;
}
return 0;
}