围圈报数

围圈报数

http://www.nowcoder.com/questionTerminal/b033062d346c4e42a7191b94164c1cd7

循环链表

#include<stdio.h>
#include <stdlib.h>
int N;
typedef struct Node{
    int id;
    struct Node * next;
}People;
People *init()
{
    People *h = (People *)malloc(sizeof(People)); // 头结点
    h->id = 1;
    h->next = NULL;
    People *p =h;
    for(int i = 2;i<N;i++)
    {
        People *temp = (People *)malloc(sizeof(People));
        temp -> id = i;
        temp -> next = NULL;
        p->next = temp;
        p = p->next;
    }
    People *temp = (People *)malloc(sizeof(People));
    temp -> id = N;
    temp -> next = h;
    p ->next = temp;
    return h;
}
void function(People *head)
{
    People *p = head; // p为出圈后的第一个报数的人
    while(p->next != p) // 至少还有两人
    {
        int num;
        People *delete = p->next->next; // 待出圈的人
        People *q = p->next; // 出圈的人的上一位
        num = delete->id;
        printf("%d ",num);
        q->next = delete->next;
        p = delete->next;
        delete->next = NULL;
        free(delete);
    }
    printf("%d\n",p->id);
}
int main()
{
    int m;
    scanf("%d",&m);
    while(m--)
    {
        People *head;
        scanf("%d",&N);
        if(N==1)
        {
            printf("1\n");
            continue;
        }
        head = init(); // 初始化循环链表
        function(head);
    }
}
全部评论

相关推荐

10-28 11:04
已编辑
美团_后端实习生(实习员工)
一个2人:我说几个点吧,你的实习经历写的让人觉得毫无含金量,你没有挖掘你需求里的 亮点, 让人觉得你不仅打杂还摆烂。然后你的简历太长了🤣你这个实习经历看完,估计没几个人愿意接着看下去, sdk, 索引这种东西单拎出来说太顶真了兄弟,好好优化下简历吧
点赞 评论 收藏
分享
我见java多妩媚:大外包
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务