基本信息
源码名称:约瑟夫环的链表实现.cpp
源码大小:1.17KB
文件格式:.cpp
开发语言:C/C++
更新时间:2020-12-10
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍

约瑟夫环的链表实现,使用当前结点的前一个结点巧妙实现删除操作


#include <bits/stdc .h>

//约瑟夫环的链表实现

using namespace std;

struct link{

       int value;

       link* next; //或者写成 struct link* next;

};

int main()

{     

       int n,m;

       while (cin>>n>>m && n!=0 && m!=0){           //读取

              link* head=(link*)malloc(sizeof(link)); //申请头节点,链表的尾指链表头

              head->value=1;

              head->next=head;  //循环

              link* index=head; //index是游标,临时变量

              for(int i=2;i<=n;i ){                 //申请够n个节点,一直往中间插入数字

                     link* nextLink=(link*)malloc(sizeof(link));

                     nextLink->value=i;

                     nextLink->next=head;        //每次保证构成循环

                     index->next=nextLink;

                     index=nextLink;

              }

              link* preLink=index;                //preLinkindex的前一个节点 

              index=head;                     //index相当于一个游标 

              while (index->next!=index){       //直到只剩下一个节点,即尾巴==

                     for (int i=1;i<m;i ) {          //数够m个节点

                            index=index->next;

                            preLink=preLink->next;

                     }

                     preLink->next=index->next;     //index是第m个节点 前一个节点连接后一个节点,跳过中间节点,那就在链表中少了一个节点

                     link* tmp = index;   //删除结点操作

                     index=index->next;

                     free(tmp);

              }

              cout<<index->value<<endl;            //输出这个结点的值

       }

       return 0;

}