学习目标:
java创建链表的创建以及遍历。
学习内容:
java和c语言的不同,c语言内自带指针,而java没有,我们可以创建一个用来模拟指针的运行。
废话不多说,直接展示完整的代码。
首先定义一个链表的变量,该链表由当前数值以及下一个链表构成。
public class ListNode {
int val;
ListNode next;
public ListNode(int val) {
this.val = val;
}
public ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
@Override
public String toString() {
return "ListNode{" +
"val=" + val +
", next=" + next +
'}';
}
}
可以看到,这个定义首先就非常的有意思哈,这个有点像套环,一圈一圈的把自己套进去。我想为什么不是定义当前值和下一个值是因为如果要将链表连起来的话,势必要将新链的当前值与旧链的下一个值关联起来。这样首先是两个对象,然后还要再关联,非常的耗时且复杂。而这种方式可以说是相当巧妙了,每日一赞,牛。
public void test3(){
ListNode Listnode = new ListNode(0);
//创建首节点,节点的val是0.
ListNode nextNode;
//声明一个变量用来在移动过程中指向当前节点
nextNode=Listnode;
//指向首节点,这样两个结点的指针指向同一个结点
//创建链表
for(int i=1;i<10;i++){
ListNode node = new ListNode(i); //生成新的节点
nextNode.next=node; //把新节点连起来
nextNode=nextNode.next; //当前节点往后移动 只用了后面的链表 为了把前面的值清掉好进行新的一轮
} //当for循环完成之后 nextNode指向最后一个节点,
nextNode=Listnode; //重新赋值让它指向首节点
print(nextNode); //打印输出
}
static void print(ListNode listNoed){
//创建链表节点
while(listNoed!=null){
System.out.println("节点:"+listNoed.val);
listNoed=listNoed.next;
}
System.out.println();
}
上面被我注释的乱七八糟,代码不多,小伙伴们需要的话复制之后捎带手删掉吧。
可以看到,首先创建了一个初始化对象,节点为0。然后,又创建了移动变量的nextNode,这个移动变量作为一个指针在不断的移动,最后再将移动变量指向首节点,这样可使两指针同步。
然后开始for循环,增加新的节点,首先创建节点,然后将该节点附到nextNode的next处,整个作为移动变量,这个移动指针最终去掉当前值,只留下下一个位置的数。这里很神奇的一个点就是在debug的时候会发现这个Listnode和nextNode是不一样的,这个Listnode显示的是全部的链数,而nextNode只是显示当前遍历的这个链,如图所示
可以看到此处的节点为8开始,前面的是7的链数,可以试一试。
学习产出:
首次尝试java的链表,还需要再学习学习相关的代码。