报数—循环链表

来源:互联网 发布:免费行业报告下载知乎 编辑:程序博客网 时间:2024/06/06 00:16
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;}