当前位置: 代码迷 >> 综合 >> 九度OJ1188约瑟夫环 1188(循环链表)
  详细解决方案

九度OJ1188约瑟夫环 1188(循环链表)

热度:80   发布时间:2023-12-16 03:53:13.0
#include<cstdio>
#include<stdlib.h>
using namespace std;typedef struct node{int data;node* next;
}node,*LinkList;LinkList Init(int n)
{//建立头节点LinkList head,L,P;head=new node;head->data=1;L=head;
for(int i=2;i<=n;i++){P=new node;P->data=i;L->next=P;L=P;}L->next=head;return head;///最终指回头节点
}void solve(LinkList head,int k,int p)
{LinkList temp,L;L=head;while(L->data!=k)L=L->next;///移动到开始的位置while(L->next!=L)///当链表中不止一个元素时{for(int i=1;i<p;i++)///这里要从1开始{temp=L;L=L->next;}printf("%d ",L->data);temp->next=L->next;free(L);///删除节点L=temp->next;}printf("%d\n",L->data);///输出最后一个值
}int main()
{int n,p;scanf("%d %d",&n,&p);LinkList head=Init(n);solve(head,1,p);
}