美文网首页
围圈报数

围圈报数

作者: HelloSam | 来源:发表于2020-04-02 17:12 被阅读0次

    #include <stdio.h>
    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    
    struct Node{
        int num;
        Node * next;
    };
    
    void deleteNode(Node *p);
    
    int main()
    {
        int m,N;
        cin >> m;
        for(int i=0;i<m;i++)
        {
            cin >> N;//要产生N个节点
            
            Node *p = (Node *)malloc(sizeof(Node));
            Node *q = p;
            p->num = 1;
            for(int j=2;j<=N;j++)
            {
                Node *s = (Node *)malloc(sizeof(Node));
                s->num = j;
                p->next = s;
                p = s;
            }
                p->next = q;
            
            int flag = N;//delete一个,flag就减1,直到减到0表示全部删除了,就退出循环
            
            p = q;
            while(flag!=0)
            {
                //for(int k =0;k<2;k++)//p向后走两次就到了要删除的位置
                //{
                //  p = p->next;
                //}
                p = p->next;//现在只让他走一步,那么p的下一个就是要删除的
                cout << p->next->num << " ";
                deleteNode(p);//传给的是p,要删除的是p的下一个节点
                flag--;
                p  = p->next;
            }
            cout << endl;
        }
    
        return 0;
    }
    
    void deleteNode(Node *p)
    {
        Node *s = p->next;
        p->next = s->next;
        free(s);
    }
    
    

    相关文章

      网友评论

          本文标题:围圈报数

          本文链接:https://www.haomeiwen.com/subject/flzxphtx.html