围圈报数

2020-04-02  本文已影响0人  HelloSam

#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);
}

上一篇 下一篇

猜你喜欢

热点阅读