约瑟夫问题的java代码和解释

约瑟夫问题的java代码和解释,第1张

约瑟夫问题的java代码和解释

学到环形链表 总绕不开的是约瑟夫问题:

首先 假如我们要构造的是n个boy类型的结点

如图是Boy类

接下来是构造环形链表了 

上面代码的意思是创一个循环链表(链表的单元此处是boy不是node) 结点数依据给的nums来 怎样才能建成循环链表呢 首先分为里面还什么都没有的情况 那这样就直接把新的boy加进来 自己指向自己 用个first变量来存储当做第一个变量 顺便把这个变量存储给temp temp用来干什么呢? 比如新建两个到还好 三个四个呢 就不能获取上一个结点呢(获取上一个结点 才能让上一个结点的下一个等于新加进来的boy 再让这个boy指向first)所以temp用来临时存储“上一个”的结点。每次循环最后都把新加进来的结点的赋给temp,这样下次循环temp就存储的是新进来boy的上一个结点了。 first.setNext(first) 的意思就是first的下一个结点还是first。

 

 

 最后的也很好理解 first存储每次开始数的结点 出列以后first就要指向出列的boy的后一位

helper存储环形链表最后一个结点 以便数出某某boy后和数出的next连接 继续构成循环链表

其实你会发现 helper一直在first前面一个结点

下面是测试类:

 结果:

 这样就结束啦(忽略了一些类的代码不影响理解)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5695557.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存