小白自学java-----有头链表

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。
后面的以此类推。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值