void Josephu(LNode*& L, int n,int s,int m) //n个人,从s开始,数到m出列
{
LNode* p = L;
LNode* q;
//q = (LNode*)malloc(sizeof(LNode));
for (int i = 1; i <= n; i++)
{
if (p->data == s)
break;
p = p->next; //找出s的位置,并用p记录
}
printf("依次出列的顺序为:\n");
for (int i = 0; i < n; i++) //n次出列
{
int j = 1;
while (j < m)
{
p = p->next; //依次报数,当j=m时,结束循环,找到相应的p结点
j++;
}
printf("%d ", p->data);
//将当前数据域输出,并修改当前数据域为下一结点的数据域,并修改当前的数据域为下一结点的数据域,
//同时指向下一结点的下一结点,用来删除当前结点
q = p->next; //用q保存p的下一结点
p->data = p->next->data;//p的数据域改为下一结点的数据域
p->next = p->next->next;//指向下一结点
free( q);
}
}