JAVA没有C++中指针的概念。所以制作链表的时候要熟练使用引用。
这个code是实现一个丢手绢的问题。让n个小朋友围成一个圆。这时候就要建立一个有头链表,然后让他们首尾相连。
public class demo4 {
public static void main(String[] args) {
Cyclink cyclink=new Cyclink();
cyclink.setLen(6);
cyclink.createLink();
cyclink.show();//展示链表是否已经首位相连
}
}
class child
{
int number;
child nextChild=null;
public child(int number)
{
this.number=number;
}
}
class Cyclink
{
//先定义一个 指向链表第一个的引用
child firstChild=null;
child temp=null;
int len=0;
//构建
public void setLen(int len)
{
this.len=len;
}
//初始化环形列表
public void createLink()
{
for(int i=1;i<= len;i++)
{
if(i==1)
{
child ch=new child(i);
this.firstChild=ch;
this.temp=ch;
}
else
{
if(i==len)
{
child ch=new child(i);
temp.nextChild=ch;
temp=ch;
temp.nextChild=this.firstChild;
}
else
{
child ch=new child(i);
temp.nextChild=ch;
temp=ch;
}
}
}
}
public void show()
{
child temp=this.firstChild;
for(int i=0; i<10;i++) {
System.out.println(temp.number);
temp=temp.nextChild;
}
}
}
输出:
1
2
3
4
5
6
1
2
3
4
这里我们可以看见。我们在建立链表的时候 不能像c++一样,直接通过class里的nextChild控制。我们要建立一个额外的class temp来控制nextChild的指向。
if(i==1)
{
child ch=new child(i);
this.firstChild=ch;
this.temp=ch;
}
运行之后。我们现在有3个child。一个叫ch,里面有一个int是1,一个firstChild,它引用了ch,也就是说它就是ch了。
最后一个是temp,temp也引用了ch,所以temp现在也等于ch。
else
{
child ch=new child(i);
temp.nextChild=ch;
temp=ch;
}
当i=2的时候,我们运行这个代码。
现在我们有了4个child。
第一个是第一行code创建的ch里面有一个int是2.
第二个是我们刚刚创建的ch,里面有一个int是1。
第三个是firstChild,它没有变 还是等于第一个创建的ch(int为1 的ch)
最后一个是temp,因为上一步我们的temp已经等于我们创建的第一个ch了。所以temp.nextChild也就是第一个ch里的nextChild。我们让第一个ch的nextChild引用(指向)了我们创建的第二个ch。
然后让temp等于第二个ch。
后面的以此类推。