【C语言】 约瑟夫环,循环链表实现

        
        更新一下,昨天的代码有点问题,没有考虑到头结点的影响,我的方法是:

        在进行步数位移的时候判断标记点,如果走到了头结点,就在循环里面立即往后再位移一次,把头结点跳过;同时在后面删除元素的时候,再次判断位移点有不有走到头结点,如果走到了的话,就直接再往后移动一位,这样就成功跳过头结点了

        单独拎出来约瑟夫环实现代码,函数封装


//约瑟夫
int link_yue(NodePtr L, int flag) {
    if (L == NULL || flag <= 0 || link_empty(L)) {
        printf("输入的参数有误或链表为空。\n");
        return -1;
    }

    NodePtr prev = L; 
    NodePtr curr = L->next; 

    while (L->len > 1) 
    { 
        for (int count = 0; count < flag-1; count++) 
        {
            prev = curr; 
            curr = curr->next; 
            if(curr == L)              //在这里加入了一个if判断条件,判断在位移的时候有不有经过头节点,经过就跳过
            {
                prev = curr;
                curr = curr->next;
            }
        }
       
        printf("删除节点的值为: %d\n", cu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值