报数—循环链表

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;

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值