标签:
1.已知n个人(n>=1)围坐一圆桌周围,从1开始顺序编号。从序号为1的人开始报数,顺时针数到m的那个人出列。他的下一个人又从1开始报数,数到m的那个人又出列。依此规则重复下去,直到所有人全部出列。请问最后一个出列的人的编号。
Node* RemoveList(Node* head, int len)
{
Node* pPre=NULL;
//存储被删除节点的前驱节点
Node* pCur=tail;
//从第K个人开始报数
for(int i=0; i<K; i++)
{
pPre=pCur;
pCur=pPre->next;
}
while(pCur->next!=pCur)
{
//数到m的人出列
for(int i=1; i<m; i++)
{
pPre=pCur;
pCur=pPre->next;
}
pPre->next=pCur->next;
printf("被删除的元素:%4d ",pCur->data);
free(pCur);
pCur=pPre->next;
}
}
解决方案:
使用循环链表;进而转化为循环链表的节点删除。
标签:
原文地址:http://www.cnblogs.com/hj-blog/p/4432414.html