java链表的头插法和尾插法详解
java链表的头插法和尾插法
链表是由值和地址组成,地址指向下一个值的地址,
如下图所示:

我们先定义一个节点类Listnode,里面包含值和地址属性,再通过构造器传值为这个值在内存中申请一块区域。
代码如下:
public class Listnode {
//链表中一个节点的值属性
public int value;
//链表中一个节点的指针域属性,指向下一个值的地址,因为下一块区域是Listnode类型的所以next也是Listnode类型
public Listnode next;
//构造器,通过值传递给value赋值
public Listnode(int n) {
this.value=n;
}
}先创建一个链表类Linklist
头插法的思路是定义一个头指针Listnode head=null,把第一个节点的地址通过值传递给它,再创建节点时,让这个新节点的next指针指向旧节点,再让这个头指针指向新节点。
如下图:



头插法看如下
代码:
public void startAdd(int n) {
//通过new实例给value创建一个新节点
Listnode listnode=new Listnode(n);
//让新节点的下一个指向旧节点,因为旧节点通过值传递的方式传给head
listnode.next=head;
//新节点通过值传递的方式传给head
head=listnode;
}尾插法的思路是先定义一个游标temp,游标从头结点head开始,如果它的next指针域不是null,就让游标指向下一个,直到游标指向next指针域为null,然后在这个节点后插入新的节点。



尾插法代码
如下:
public void endAdd(int n) {
//通过new实例给value创建一个新节点
Listnode listnode=new Listnode(n);
//判断头结点是否为空,空就通过值传递把新节点传给头节点,直接return不再走下面的流程
if(head==null) {
head=listnode;
return;
}
//定义游标
Listnode temp=head;
//通过游标判断此节点的next指针域是否为空,不是就指向下一个节点
while(temp.next!=null) {
temp=temp.next;
}
//此时指向最后一个节点,让它的next指针域指向新节点
temp.next=listnode;
}总体代码如下:
public class Linklist {
//定义头指针
Listnode head;
//头插法
public void endAdd(int n) {
Listnode listnode=new Listnode(n);
if(head==null) {
head=listnode;
return;
}
Listnode temp=head;
while(temp.next!=null) {
temp=temp.next;
}
temp.next=listnode;
}
//尾插法
public void startAdd(int n) {
Listnode listnode=new Listnode(n);
listnode.next=head;
head=listnode;
}
//把添加的值打印的方法
public void printLink() {
Listnode temp=head;
while(temp!=null) {
System.out.print(temp.value+" ");
temp=temp.next;
}
}
//获取添加多少数的方法
public void getLength() {
int count=0;
if(head==null) {
System.out.println(0);
return;
}
Listnode temp=head;
while(temp!=null) {
count++;
temp=temp.next;
}
System.out.println("你添加了"+count+"个数");
}
}通过test类来测试一下:
public class Test {
public static void main(String[] args) {
Linklist linklist=new Linklist();
linklist.endAdd(1);
linklist.endAdd(2);
linklist.endAdd(3);
linklist.endAdd(4);
linklist.startAdd(2);
linklist.startAdd(3);
linklist.startAdd(4);
linklist.printLink();
linklist.getLength();
}
}结果如下:

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Spring Boot console log 格式自定义方式
这篇文章主要介绍了Spring Boot console log 格式自定义方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-07-07
spring boot整合flyway实现数据的动态维护的示例代码
本文主要介绍了spring boot整合flyway实现数据的动态维护的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2025-04-04
SpringBoot Java后端实现okhttp3超时设置的方法实例
Okhttp的使用没有httpClient广泛,网上关于Okhttp设置代理的方法很少,下面这篇文章主要给大家介绍了关于SpringBoot Java后端实现okhttp3超时设置的相关资料,需要的朋友可以参考下2021-10-10


最新评论