首页 > 代码库 > 循环链表的应用——约瑟夫环
循环链表的应用——约瑟夫环
题目:
报数,共n个人 从1编号,依次报号,报到m出队,再接着从下一个人開始数,依次输出出队的人。
#include<stdio.h>
#include<stdlib.h>
typedef struct n
{
int data;
struct n* next;
}node;
node* creat(int n)//创建n个节点的链表
{
int i=0;
node* q = NULL;
node* p = (node*)malloc(sizeof(node));
p->data = http://www.mamicode.com/1;//1是编号
node* head = p;
/////////////////////////////////
for(i=1;i<n;i++)
{
q = (node*)malloc(sizeof(node));//q是当前最后一个节点
q->data = http://www.mamicode.com/i+1;
p->next = q;//p是q的前一个节点
p=q;
}
p->next = head;
return head;
}
////删除报号为m的//////////////////
void delte(int m,node* head)
{
int i;
node* p;
node* q;
node* temp;
p = head;
while(p->next!=p)
{
for(i=1;i<m;i++)
{
q=p;
p = p->next;
}
//删除节点
printf("%d ",p->data);
temp = p;
q->next = p->next;
p = p->next;
free(temp);//中间变量temp就是用来释放空间的
}
printf("%d\n",p->data);
}
int main()
{
int n,m;
node* l;
scanf("%d%d",&n,&m);
l = creat(n);
delte(m,l);
}
循环链表的应用——约瑟夫环
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。