#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int date;
struct node *next;
}List;
void createlist(List*head,int n)//创建循环链表读入数据
{
int i;
List *p=head,*q;
for(i=1;i<=n;i++)
{
q =(List*)malloc(sizeof(List));
q->next = NULL;
q->date = i;
p->next = q;
p=q;
}
p->next = head->next;
}
void dele(List*head,int n,int k)
{
int count=1;
List *p=head;
while(n!=1)
{
if(count==k)
{
count = 1;//重置计数
n--;//少了一个结点
p->next=p->next->next;//跳过要删除的结点
}
else
{
p=p->next;//找到要删除的结点的前一个结点
count++;
}
}
printf("%d",p->date);
}
int main()
{
int n,k;
List *p;
List *head = (List*)malloc(sizeof(List));//创建头结点
head ->next =NULL;
scanf("%d",&n);
createlist(head,n);
scanf("%d",&k);
dele(head,n,k);
return 0;
}
SWUST OJ 956: 约瑟夫问题的实现
最新推荐文章于 2024-04-04 21:02:27 发布