数据结构猴子选大王 算法思路

2025-03-06 23:16:15
推荐回答(2个)
回答1:

h百度地图

回答2:

使用循环链表,
链表定义为
typedef struct node{
int data;
struct *next;
}linklist;
从第一个节点开始计数,记到哪个节点就将其删除,然后将这个节点的下个节点赋给该节点的上个节点的next
算法:
while (total!=1)
{
/* 报数过程,p指向要删除的节点 */
for (i=1;i {
p=p->next;
}
/* 打印要删除的节点序号 */
printf("[%d] ",p->data);
/* q 指向 p 节点的前驱 */
while(q->next!=p)
{
q=q->next;
}
/* 删除 p 节点 */
q->next=p->next;
/* 保存被删除节点指针 */
s=p;
/* p 指向被删除节点的后继 */
p=p->next;
/* 释放被删除的节点 */
free(s);
/* 节点个数减一 */
total--;
}
最后剩下的节点即为所求。