约瑟夫环

#include<stdio.h>
#include<malloc.h>

#define size sizeof(link)
#define null 0

typedef struct link  
{  
    int num;  
    struct link *pre;  
    struct link *next;  
}link;  
link *current = null;
link *q = null;
link *head = null;

int main()
{
	int n,m,p,i,count;
	scanf("%d %d %d",&n,&m,&p);
	
	for(i=1;i<=n;i++)
	{
		q = (link*)malloc(size);  
        q->num = i;  
		if(i==p)
		{
			head = q;
		}
        if(current == null)  
        {  
            current = q;  
            current->next = q;  
            current->pre = q;  
        }  
        else  
        {  
            q->next = current->next;  
            current->next->pre = q;  
  
            current->next = q;  
            q->pre = current;  
            current = q;  
		}
	}
	
	count = m-1;
	for(i=0;i<n;i++)
	{
		while(count--)
		{
			
			head=head->next;
		}
		printf("%d ",head->num);

		head->pre->next=head->next;
		head->next->pre=head->pre;
		count = m;
	}
	
	return 0;

}

一开始打算用循环做的,结果删除的时候卡了...
换成双向循环之后,感觉到了世界的美丽。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值