前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「优质题解」出圈

「优质题解」出圈

作者头像
编程范 源代码公司
发布2020-02-16 19:41:34
5480
发布2020-02-16 19:41:34
举报

这道题的地址,想尝试的小伙伴可以来试哦:

https://www.dotcpp.com/oj/problem1160.html

思路:

解题思路:(原:1047: C语言程序设计教程(第三版)课后习题10.5)在1047的 的基础上,把报数的数m改为自己输入,同时改为多组测试数据,并且输出带换行符;

思路一:(公式法)

思路二(循环链表法) 1:创建长度为n的循环链表(单链表的最后一个结点与首结点连接,不是头结点);

2:链表结点包括编号和next指针;

3:从首结点p开始报数(p=p->next),但是只报数到离开的结点的前一个结点,然后删除它后面的结点,更新报数的第一个结 点(p=p—>next);用指针q指向要删除的结点;

4:重复上述过程,直到链表中只有一个结点结束(即:p->next=p);

5:如下图假设有6个结点(6个人),报数数为3;

把头结点free了,因为删除过程中,头结点的next被删除的话,头结点next指向不安全地方,就不要用它了;

以上就是链表的实现过程,要挑战自己可以弄一个单链表实现的,再厉害一点可以顺序表,但顺序表不推荐,

1.顺序表删除要移动大量元素

2.报数到最后一个之后,返回第一个的实现过程复杂,需要用下标关系,很容易晕;

注意事项: 每个结点删除后都要free了,输出留下来的那个人之后也要把它的free了,输出带换行符; 参考代码:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程范 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档