c++数据结构-----链表

前面学数据结构一直卡着 今年重新学 为了不半途而废 决定每天来这里发布总结 让自己坚持下去

#include<bits/stdc++.h>    //万能头文件
using namespace std;

struct node{              //单向链表的必备data和next
    int data; 
    node * next;
};

int main(){

  int n,m;
  cin>>n>>m;

 node *head=new node;   //创建头结点
 head->data=1;          //给data和next赋值
 head->next=nullptr;   
 node *now=head;       //这时创建当前结点 把头结点赋值给他

 for(int i=2;i<=n;i++){    //创建约瑟夫链表   从1-n的
     node *p=new node;    //当前的now里面只有一个head 并不能now=now->next 所以就要new 一个新 
                           的结点得到data和next 再赋值给now 使now 更新
     p->data=i;          
     p->next=nullptr;
     now->next=p;       // now指向p 得到p的地址  p就加入到了链表中
     now=p;           //p再赋值给now  now现在就是p了
 }
now->next=head;      //最后再指向head 首位相连  约瑟夫问题就轻轻松松

now=head;              //从头开始
node *pre=nullptr;    //再创建一个指针 是为了保存当前的now 当now要被删除时 就得进位 
while(n>0){
for(int i=1;i<m;i++){   下面会搞个例子解释 pre的作用
      pre=now;
     now=now->next;
}
cout<<now->data<<" ";
pre->next=now->next;
delete now;
now=pre->next;
m--;
}
return 0;
}

pre的解释

假如m=2      第一次时  now=1  pre=null;   

  进入第一个循环  pre=1  now=2 直接退出

  输出2  pre->next=now->next  等于  pre->next=2->next(3)   pre->next就得到了3的地址 就直接 

省略了2这个位置 链表里面就相当于没了2   我们再delete就实实在在没有了 再now=pre->next now现在就是从3开始了 接着下一个循环

如理解有错 忘网友纠正  谢谢

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值