单链表约瑟夫环

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;    

  }

}

 

解决方案:

使用循环链表;进而转化为循环链表的节点删除。

 

转载于:https://www.cnblogs.com/hj-blog/p/4432414.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值