其实本文中的链表并不规范,只适用于本题,还有鄙人第一次发文,请多多指教
#include <iostream>
#include<stdlib.h>
using namespace std;
class J
{
public:
J(){};
string name;
J *pre;//前一个人
J *next;//后一个人
};
void Joseph(J *head,int n)
{
int i=1/*退出条件*/, j=0;//计数器
J *p = head;
while (j<n)
{
i++;
p = p->next;
if (i == 3)//数3退出
{
j++;
cout<<"第"<<j<<"个退出的是"<<p ->name<<endl;
p->pre->next = p->next;//删除当前节点
i = 0;
}
}
}
J* Node(int n)
{
J *j = NULL, *tail = NULL, *head=NULL;
{
public:
J(){};
string name;
J *pre;//前一个人
J *next;//后一个人
};
void Joseph(J *head,int n)
{
int i=1/*退出条件*/, j=0;//计数器
J *p = head;
while (j<n)
{
i++;
p = p->next;
if (i == 3)//数3退出
{
j++;
cout<<"第"<<j<<"个退出的是"<<p ->name<<endl;
p->pre->next = p->next;//删除当前节点
i = 0;
}
}
}
J* Node(int n)
{
J *j = NULL, *tail = NULL, *head=NULL;
for (int i = 0; i<n; i++)
{
J *j = new J();
{
J *j = new J();
if (NULL == j)
{
printf("内存分配失败!\n");
exit(0);
}
cin >> j->name;
if (head == NULL) {//初始化head
head = j;
head->next = head;
head->pre = head;
tail = head;
}
//插入节点,达成效果tail->next==head
j->pre = tail;
j->next = head;
tail->next = j;
head->pre = j;
tail = j;
}
return head;
}
int main()
{
int n;
cout << "请问有几个人参与游戏:";
cin >> n;
cout << "请输入"<<n<<"个名字";
cout << endl;
J *head = NULL;
head=Node(n);
{
printf("内存分配失败!\n");
exit(0);
}
cin >> j->name;
if (head == NULL) {//初始化head
head = j;
head->next = head;
head->pre = head;
tail = head;
}
//插入节点,达成效果tail->next==head
j->pre = tail;
j->next = head;
tail->next = j;
head->pre = j;
tail = j;
}
return head;
}
int main()
{
int n;
cout << "请问有几个人参与游戏:";
cin >> n;
cout << "请输入"<<n<<"个名字";
cout << endl;
J *head = NULL;
head=Node(n);
Joseph(head,n);
system("pause");
return 0;
system("pause");
return 0;
}