单链表实现约瑟夫环(JosephCircle)(C语言)

来源:互联网 发布:淘宝经营类目的优势 编辑:程序博客网 时间:2024/06/05 18:53
//使链表形成一个环void FormCyc(PSListNode *pHead){    if (NULL == pHead)    {        return;    }    else    {        PSListNode pNode = *pHead;        while (NULL != (pNode->pNextNode))        {            pNode = pNode->pNextNode;        }        pNode->pNextNode = *pHead;    }}PSListNode JosephCircle(PSListNode pHead, int M){    if ((NULL == pHead) || (M <= 0))    {        return NULL;    }    else    {        //让链表中所有元素形成一个环        FormCyc(&pHead);        PSListNode pPreNode = NULL;        PSListNode pCurNode = pHead;        PSListNode pDesNode = NULL;        int temp = M;        while (pCurNode->pNextNode != pCurNode)        {            temp = M;            pPreNode = pCurNode;            while (--temp)            {                pPreNode = pCurNode;                pCurNode = pCurNode->pNextNode;            }            //记住要从链表中删除的节点的位置,把它的空间释放了            pDesNode = pCurNode;            pCurNode = pCurNode->pNextNode;            pPreNode->pNextNode = pCurNode;            free(pDesNode);            pDesNode = NULL;        }        //如果M=1,就说明所有结点都要被删除,那么就返回空,否则就返回剩下的那个结点的指针        if (1 == M)        {            free(pCurNode);            pCurNode = NULL;        }        else        {            pCurNode->pNextNode = NULL;        }        return pCurNode;    }}
0 0
原创粉丝点击