java链表的头插法和尾插法详解
作者:Sshm_666
本文介绍了链表的基本概念,包括节点类Listnode和链表类Linklist,头插法和尾插法是两种常见的插入节点的方法,分别通过头指针和游标来实现,通过示例代码和测试,展示了链表的创建和操作过程
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(); } }
结果如下:
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。