struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
void creatlist(ListNode *&phead,int &n){
if(n<=99){
phead=(struct ListNode *)malloc(sizeof(struct ListNode));
phead->val=n;
n++;
creatlist(phead->next,n);
}
else if(n==100){
phead=(struct ListNode *)malloc(sizeof(struct ListNode));
phead->val=n;
phead->next=NULL;
}
}
void outlist(ListNode *phead){
if(phead!=NULL){
cout<<phead->val;
outlist(phead->next);
}
}
void outlist2(ListNode *phead,int &nn){
if(nn!=0){
cout<<phead->val<<" ";
nn--;
outlist2(phead->next,nn);
}
}
void creatyuan(ListNode *phead){
ListNode *start=phead;
while(start->next!=NULL){
start=start->next;
}
start->next=phead;
}
void delete1(ListNode *&phead,int &nnn,int &length,int num){
if(length>=num){
if(nnn!=num-1){
nnn++;
delete1(phead->next,nnn,length,num);
}
else{
length--;
nnn=1;
phead->next=phead->next->next;
delete1(phead->next,nnn,length,num);
}
}
else{
outlist2(phead, length);
}
}
int main()
{
int num;
cin>>num;
if(num<=1||num>=100){
cout<<"ERROR!";
}
else{
ListNode *phead=NULL;
int n=1;
creatlist(phead,n);//建立100次链表
//outlist(phead);
cout<<endl;
creatyuan(phead);//建立环形链表
int nn=10;
//outlist2(phead,nn);//测试
cout<<endl;
int nnn=1;
int length=100;
delete1(phead,nnn,length,num);//核心
}
return 0;
}
报数—循环链表
最新推荐文章于 2021-05-21 14:40:55 发布