约瑟夫环 好像实现不了 没时间调了 各位帮帮看看
#include <iostream>
#include <cstring>
using namespace std;
typedef struct listpoint
{
int data;
listpoint *next;
listpoint *last;
}listpoint;
listpoint *creat_noraml_list(int n)
{
listpoint *head,*normal,*end;
head = (listpoint*)malloc(sizeof(listpoint));
end = head;
for(int i = 1;i<=n;i++){
normal = (listpoint*)malloc(sizeof(listpoint));
normal->data = i;
end->next = normal;
normal->last = end;
end = normal; //最后一个节点变成新节点
cout<<"检测输入数据地址:" << normal<<endl;
}
end->next = head;
head->last = end;
cout<<"头节点地址"<<head<<endl;
return head;
}
listpoint* listn( listpoint* l1,int n)
{
listpoint*l2=l1;
for (int i = 1; i <= n; i++)
{
if (l2->next!=NULL)
{
l2 = l2->next;
}
}
return l2;
}
void delete_Point(listpoint*list,int n)
{
cout<<"头节点地址"<<list<<endl;
listpoint *p = list;
for (int i = 0; i < n; i++){
if(p->next!=NULL) p = p->next;
}
p->next->last = p->last;
p->last->next = p->next;
free(p);
}
int fun(listpoint*list,int m,int n)
{
int data;
listpoint *p;
int pos = 1; //记录当前位置
int last_pos = n;
while(last_pos!=1){
pos = pos + m -1;
while (pos>last_pos) pos -= last_pos;
delete_Point(list,pos);
last_pos--;
}
for (int i = 0; i < n; i++)
{
if (list->next!=NULL)
{
list = list->next;
}
}
cout<<"最终节点地址"<<list<<endl;
system("pause");
data = list->data;
return data;
}
int main()
{
int m = 7;
int n = 30;
listpoint* list;
list = creat_noraml_list(n);
int data = fun(list,m,n);
cout<<"最终赢家 "<< data;
system("pause");
return 0;
}