博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
几个孩子围成圈报数 当等于3的时候删除 链表实现 最终输出剩下孩子的编号
阅读量:5300 次
发布时间:2019-06-14

本文共 1623 字,大约阅读时间需要 5 分钟。

这个题目采用的2个指针,链表涉及到删除 通常都会用其中一个指针保存前面的地址 紧跟着

1 //功能:13个人围成一圈,从第一个人开始顺序报号1、2、3。 2 //凡报到“3”者退出圈子。找出最后留在圈子里的人原来的序号。 3  4 #include
5 #include
6 7 #define N 13 //共13个人 8 9 struct people //创建链表10 {11 int ID; //人物序号12 struct people *pNext; //下个元素的地址13 };14 15 typedef struct people PE;16 17 void init(PE *a, int n); //输入每个人的信息18 19 void main()20 {21 PE a[N];22 init(a, N); //对人物信息进行初始化23 24 int total = N; //剩余人数,初始化为N25 int num = 1; //报数器26 PE *p = &a[0];27 for (PE*pPrior = &a[N - 1]; total != 1; p = p->pNext) //是一个圈 pPrior指向当前结点的前一个结点28 {29 if (num != 3){30 num++;31 pPrior = pPrior->pNext; //前结点向后移一个单位32 continue;33 }34 else35 {36 pPrior->pNext = p->pNext; //删除当前结点37 num = 1;38 total--; //生剩余人数--,当人数剩余为1时循环结束39 }40 num++;//因为得往后走了 值前赋值了了1 回到循环向后移动41 }42 printf("%d", p->ID);43 system("pause");44 }45 46 void init(PE a[], int n)47 {48 for (int i = 0; i < n; i++)49 {50 a[i].ID = i + 1; //每个人的编好51 if (i != n - 1)52 {53 a[i].pNext = &a[i + 1]; //将下一个的地址赋给pNext54 }55 else56 {57 a[i].pNext = &a[0]; //将序号为1的地址赋给最后一个元素的pNext58 }59 }60 }

转载于:https://www.cnblogs.com/lanjianhappy/p/6533325.html

你可能感兴趣的文章
Scala入门(1)Linux下Scala(2.12.1)安装
查看>>
laravel
查看>>
如何改善下面的代码 领导说了很耗资源
查看>>
Quartus II 中常见Warning 原因及解决方法
查看>>
高德地图 – 1.问题集锦
查看>>
php中的isset和empty的用法区别
查看>>
Android ViewPager 动画效果
查看>>
pip和easy_install使用方式
查看>>
博弈论
查看>>
Redis sentinel & cluster 原理分析
查看>>
我的工作习惯小结
查看>>
把word文档中的所有图片导出
查看>>
浏览器的判断;
查看>>
ubuntu 18.04取消自动锁屏以及设置键盘快捷锁屏
查看>>
Leetcode 589. N-ary Tree Preorder Traversal
查看>>
thinking back no11
查看>>
机器学习/深度学习/其他开发环境搭建记录
查看>>
xml.exist() 实例演示
查看>>
判断是否为空然后赋值
查看>>
中标麒麟QT+ODBC+人大金仓开发环境配置
查看>>