圆圈中最后剩下的数字
数字 最后 剩下 圆圈
2023-09-27 14:26:30 时间
题目:0,1,....,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。
解法一 循环链表
用循环链表模拟圆圈,一次删除第m个数字。这里并未采用末班库中的函数而是自行建立循环链表(只设计用到的功能函数)。
循环链表部分
struct ListNode
{
int value;
ListNode* next;
};
//链表节点的创建
ListNode* createNode(int value)
{
ListNode* node = new ListNode();
node->value = value;
node->next = NULL;
return node;
}
//循环链表的大小
int Listsize(ListNode* head)
{
if(head==NULL)return -1;
ListNode* node = head;
int i = 0;
while (node->next != head)
{
i++;
node = node->next;
}
i++;
return i;
}
//循环链表的创建
ListNode* createCircleList(int n)
{
if(n<=0)return NULL;
ListNode* head = createNode(0);
ListNode* node = head;
for (int i = 1; i < n;i++)
{
node->next = createNode(i);
node = node->next;
}
node->next = head;
return head;
}
删除圆圈中第m个数的函数
void deletenode(ListNode* head,int m)
{
if (head==NULL||m<1)return;
ListNode* node = head;
while (Listsize(node)>1)
{
int i = 1;
while (i < m-1)
{
node = node->next;
i++;
}
ListNode* deletenode = node->next;
ListNode* nextnode = node->next->next;
node->next = nextnode;
delete deletenode;
node = nextnode;
}
//输出最后一个数字
cout << node->value;
}
int main()
{
//创建0,1,2,3,4,5的循环链表
ListNode* head = createCircleList(6);
//依次删除第4个数字
deletenode(head,4);
return 0;
}
解法二比较巧妙,资源很多不再赘述。
相关文章
- 洛谷P1307 数字反转
- Google Earth Engine ——ALOS World 3D - 30m (AW3D30) 是一个全球数字表面模型 (DSM) 数据集
- 数字调制系统的误码率matlab仿真,对比ASK,FSK和MDPSK
- 《机器人构建实战》——第2章 CDS5516数字舵机调试与参数设置
- 「基于Django的全民健康智慧中医数字服务平台」前端应用User功能(七)
- 剑指 Offer 62. 圆圈中最后剩下的数字
- 一次性将word中的数字和字母全部改为“Times New Roman”字体
- 【数字IC验证快速入门】37、UVM项目实践之APB_SPI(5)配置机制(uvm_config_db)机制深入
- 【数字IC验证进阶】以一个实例,快速上手python脚本处理log的若干关键操作(#python、#正则表达式)
- Django学习路22_empty为空,forloop.counter 从1计数,.counter0 从0计数 .revcounter最后末尾数字是1,.revcounter0 倒序,末尾为 0
- Verizon Q2营收下滑超预期:希借雅虎壮大数字媒体