代码如下,z主要是是delete不了,只有把delete注释掉程序才能跑,不然就会在输出完之后卡住并且返回一个很大的负数
#include<bits/stdc++.h>
using namespace std;
struct node{
int dete;
node* next;
};//创建节点
class re{
node* head;
int Size=0;
node* End;
public:
re(){head=NULL;End=NULL;};
void push(int x){
node* ne=new(node);
ne->dete=x;
if(Size==0){
head=ne;End=ne;
ne->next=head;
}//如果循环链表为空
else{
End->next=ne;
End=ne;
ne->next=head;
}
Size++;
}
~re(){
for(int i=0;i<Size-1;i++){
node* de=head;
head=head->next;
delete(de);
}
delete(head);
}
void print(int x){
node* use=head;
while(Size!=0){
for(int i=0;i<x-1;i++)use=use->next;//因为删除掉use会让指针失效,所以我让kill函数返回删除指针的下一个指针。循环次数也就要减一次
cout<<use->dete<<' ';
use=kill(use);
}
}
node* kill(node* k){
if(k!=head&&k!=End){
node* i;
for(i=head;i->next!=k;i=i->next);
i->next=i->next->next;
//delete(k);
Size--;
return i->next;
}else if(k==head){
End->next=head->next;
head=head->next;
//delete(k);
Size--;
return head;
}else{
node* i;
for(i=head;i->next!=k;i=i->next);
i->next=i->next->next;
End=i;
Size--;
return head;
}
}
};
int main()
{
int n,m;
re z;
cin>>m>>n;
for(int i=1;i<=m;i++)z.push(i);
z.print(n);
//z.~re();
}
请忽略我写得一团乱麻的代码,主要是delite函数我用不明白 一开始觉得循环链表很简单,就试试能不能直接封装到类里