#指针 #Java #变量 #idea #链表 #约瑟夫问题
如果事先已经了解过Java指针可以直接调到标题二
如果对链表不是很了解的话可以看我上一篇文章 http://t.csdnimg.cn/kf2mW
一.先了解JAVA指针
说到环形链表,我们需要先了解Java里面的指针和变量的关系。Java中我们并没有看见像c语言一样使用指针,实际上我们变量的访问其实都是通过指针来实现的。下面我们上代码
创建一个People类,有name(String),id(String)两种属性(这里说一下Java里面的权限定义,因为在定义类的时候用的是private(私有方法)所以不能直接对类里面的变量进行操作,需要借助set,get等方法。如果是public就可以直接进行操作)
这里我们先new了一个p1出来,然后再用p2指向p1。这里的p2其实是通过地址改的p1的name,你对p2的操作,其实都是在对p1操作。上面的输出为 Denny。这里我借用一下前辈画的图给大家看一下
如果大家还想细看一下指针之间的关系可以看看大佬的原文 链接:http://t.csdnimg.cn/Tu4Fk
二.JAVA实现环形链表
我们需要先创建第一个节点,再让first指向该节点(first自己指自己)first是不动,为了一直从第一个头节点开始遍历,形成环形。下面我们用boy来标志新节点(只是用来标志,不代表是一个节点),curboy是新节点。下面我们看如何创建并添加链表
定义 Boy类用于创建链表
num是链表节点创建的数量
在上面,我们可以看见如果是第一个节点,我们就先让first存放boy然后指向自己,这时候boy就不要了,用curboy来做为新节点加入链表。再走下去,如果不是第一个,我们就继续添加,然后指向first就行。这样我们就完成了环形链表的添加。下面我们看遍历链表
遍历链表我们只需要判断,临时节点的next是不是first(头节点)就行。