#include <iostream>
#include <string>
using namespace std;
struct Node
{
char data;
Node *next;
Node *prev;
};
int main()
{
int m;
cin>>m;
string s;
getline(cin,s);
// cout<<s<<endl;
Node *head,*p;
for(int i=1;i<=s.length()/2;i++)
{
Node *temp = new Node();
temp->data = s[2*i-1];
if(i==1) head = p = temp;
temp->prev = p;
p->next = temp;
p = temp;
}
p->next = head;
head->prev = p;
p = head;
//输出链表测试
/* do{
cout<<p->data<<" ";
p = p->next;
}while(p!=head);*/
int count = 1;
while(p->next!=p)
{
if(count%m==0)
{
cout<<p->data<<" ";
p->prev->next = p->next;
p->next->prev = p->prev;
}
p =p->next;
count++;
}
cout<<p->data<<endl;
}
根据提示,使用的双向循环链表进行实现,这样找前一个节点会比较方便。