学到环形链表 总绕不开的是约瑟夫问题:
首先 假如我们要构造的是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前面一个结点
下面是测试类:
结果:
这样就结束啦(忽略了一些类的代码不影响理解)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)