java链表的头插法和尾插法详解

 更新时间:2024年12月17日 09:32:27   作者: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();
	}
}

结果如下:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 浅析JAVA 循环结构

    浅析JAVA 循环结构

    这篇文章主要介绍了JAVA 循环结构的相关资料,文中讲解的非常细致,示例代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • Java使用FFmpeg提取音频的详细指南

    Java使用FFmpeg提取音频的详细指南

    FFmpeg 是一个开源的多媒体处理工具,支持视频、音频的编码、解码、转换等多种功能,本文将详细讲解如何使用 FFmpeg 提取音频,包括常见的音频格式提取、音频质量调整、高级处理操作等,内容浅显易懂,适合初学者快速掌握,需要的朋友可以参考下
    2024-11-11
  • Java分页简介_动力节点Java学院整理

    Java分页简介_动力节点Java学院整理

    这篇文章主要为大家详细介绍了Java分页简介的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Springboot配置管理Externalized Configuration深入探究

    Springboot配置管理Externalized Configuration深入探究

    这篇文章主要介绍了Springboot配置管Externalized Configuration深入探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Java基础教程之对象的方法与数据成员

    Java基础教程之对象的方法与数据成员

    这篇文章主要介绍了Java基础教程之对象的方法与数据成员,本文讲解对象的方法与数据成员相关知识,因为java是面向对象语言,本文的知识都是经常要用到的,需要的朋友可以参考下
    2014-08-08
  • 关于JDBC的简单封装(实例讲解)

    关于JDBC的简单封装(实例讲解)

    下面小编就为大家带来一篇关于JDBC的简单封装(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • java 如何判断是否是26个英文字母

    java 如何判断是否是26个英文字母

    这篇文章主要介绍了java 如何判断是否是26个英文字母的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • Kotlin 基础语法详细介绍

    Kotlin 基础语法详细介绍

    这篇文章主要介绍了Kotlin 基础语法详细介绍的相关资料,需要的朋友可以参考下
    2017-05-05
  • 一文详解SpringBoot3如何自定义starter

    一文详解SpringBoot3如何自定义starter

    在Spring Boot中,starter是一种特殊的依赖,它可以帮助开发人员快速引入和配置某个特定的功能模块,我们在面试中通过会被问到SpringBoot3如何自定义starter,所以本文小编给大家详细介绍了SpringBoot3自定义starter的步骤,需要的朋友可以参考下
    2024-09-09
  • SpringBoot 对象存储 MinIO的详细过程

    SpringBoot 对象存储 MinIO的详细过程

    MinIO 是一个基于 Go 实现的高性能、兼容 S3 协议的对象存储,它适合存储海量的非结构化的数据,这篇文章主要介绍了SpringBoot 对象存储 MinIO,需要的朋友可以参考下
    2023-07-07

最新评论