//实现算法---
//准备:含有头结点的单链表,每个结点的数据域存储顺序;
//思路:**使单链表的为尾结点连接首元结点 形成循环链表 然后每个M(代码中为3)个数字删除一位,循环至最后,只剩下一个结点就是结果**
void game_Links(Linklist &L){
Linklist p,s;
p=L->next;
while(p->next!=NULL)p=p->next;//使p遍历到尾结点
p->next=L->next;//连接头尾
p=L->next;//p指向首元结点
// 循环链表
int i;
while (p->next!=p){
for(i=1;i<3;i++){
s=p;
p=p->next;
}//使得p遍历到该删除的结点,s为前一位结点
s->next=p->next;
free(p);
//进行删除释放内存
p=s->next;
//继续循环
}
printf("%d",p->data);//输出结果
}
----------------------------------------------
//2016.3.23
链表实现约瑟夫环
最新推荐文章于 2023-05-14 18:05:47 发布