单链表实现约瑟夫环(JosephCircle)
问题描述:
有n个人围成一个环,然后给从某个人开始顺时针从1开始报数,每报到m时,将此人出环杀死(当然不杀死也可以啊),然后从下一个人继续从1报数,直到最后只剩下一个人,求这个唯一剩下的存活的人是谁?
代码实现:
typedef int DataType;
typedef struct SListNode{
struct SListNode* _next;
DataType _data;
}SListNode,*pSListNode;
pSListNode JosephCircle(pSListNode pHead,DataType x)
{
int count = 0;
pSListNode cur = pHead,tail = pHead;
pSListNode str = NULL;
if (pHead == NULL)
return NULL;
while (tail->_next != NULL)//把链表构成环
tail = tail->_next;
tail->_next = pHead;
while (cur->_next != cur)
{
/*count = 1;//方法一
while (count != x)
{
cur = cur->_next;
count++;
}*/
count = x;//方法二
while (--count)
{
cur = cur->_next;
}
str = cur->_next; //替换法删除节点
cur->_data = str->_data;
cur->_next = str->_next;
free(str);
}
}