单链表约瑟夫环

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;    

  }

}

 

解决方案:

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

 

posted @ 2015-04-16 16:15  hy1hy  阅读(115)  评论(0编辑  收藏  举报