h百度地图
使用循环链表,
链表定义为
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--;
}
最后剩下的节点即为所求。