Java 链表结点插入

Java 链表结点插入PS:链表是一种数据结构,而数据结构就是一种存放数据的方式。为什么需要链表?我们知道,数组也可以存储数据,那么为什么还需要链表呢?接下来,我们来看看数组和链表的区别:1、数组就像身上编了号站成一排的人,要找第10个人很容易,根据人身上的编号很快就能找到。但插入、删除慢,要往某个位置插入或删除一个人时,后面的人身上的编号都要变。当然,加入或删除的人始终末尾的也快。2、链表就…

大家好,又见面了,我是你们的朋友全栈君。

PS:链表是一种数据结构,而数据结构就是一种存放数据的方式。

为什么需要链表?
我们知道,数组也可以存储数据,那么为什么还需要链表呢?接下来,我们来看看数组 和链表的区别:
1、数组就像身上编了号站成一排的人,要找第10个人很容易,根据人身上的编号很快就能找到。但插入、删除慢,要往某个位置插入或删除一个人时,后面的人身上的编号都要变。当然,加入或删除的人始终末尾的也快。

2、链表就像手牵着手站成一圈的人,要找第10个人不容易,必须从第一个人一个个数过去。但插入、删除快。插入时只要解开两个人的手,并重新牵上新加进来的人的手就可以。删除一样的道理。

链表示意图
这里写图片描述

  • 链表的建立
class TestLink{//创建一个外部类
	
	private Entry head;//指向头结点的引用
	public TestLink(){
		head = new Entry();//用结点类 new 一个头结点
	}
	
	class Entry{//Entry  创建一个结点内部类
		int data;//定义数据块
		Entry next;//定义地址块
		
		public Entry(){//构造方法1
			data = -1;//对结点数据块初始化
			next = null;//对地址初始化
		}
		public Entry(int val){//构造方法2
			data = val;//对数据块赋值
			next = null;
		}
	}
}
public class TestDemo2 {

			public static void main(String[] args) {
				TestLink testlink = new TestLink();
				//创建一个 链表外部类 对象
    }
}
  • 头插法:从头插入
public void insertHead(int val){
				//有这么一个结点  
				Entry cur = new Entry(val);
				cur.next = head.next;
				head.next = cur;
			}

头插法示意图:
这里写图片描述

  • 尾插法:从尾插入
public void insertTail(int val){
				//找到尾巴
				Entry cur = head;
				while(cur.next != null){//遍历结点
					cur = cur.next;
				}
				Entry entry = new Entry(val);//得到的结点
				cur.next = entry;
			}

尾插法示意图:
这里写图片描述

  • 从任意结点插入
public boolean insertPos(int val,int pos){
				//1、判断pos的合法性
				if(pos < 0 || pos >= getLength()+1){
					return false;
				}
				Entry cur = head;
				for(int i = 0;i <= pos-1;i++){
					cur = cur.next;
				}
				//cur    pos的前一个
				Entry entry = new Entry(val);
				entry.next = cur.next;
				cur.next = entry;
				return true;
			}

示意图:
在这里插入图片描述

完整代码:

package LianBiao;
class TestLink1{
	
	
	private Entry head;//指向头结点的引用
	
	public TestLink1(){
		head = new Entry();
	}
	
	class Entry{//Entry  Node 
		int data;
		Entry next;
		
		public Entry(){
			data = -1;
			next = null;
		}
		
		public Entry(int val){
			data = val;
			next = null;
		}
		
	}
	
	
	public void insertHead(int val){
		//有这么一个结点  
		Entry cur = new Entry(val);
		cur.next = head.next;
		head.next = cur;
		/*head.next = cur;
		cur.next = head.next;*/
	}
	
	public void insertTail(int val){
		//找到尾巴
		Entry cur = head;
		while(cur.next != null){
			cur = cur.next;
		}
		Entry entry = new Entry(val);//得到的结点
		cur.next = entry;
	}
	//得到单链表的长度:
	public int getLength(){
		int len = 0;
		Entry cur = head.next;
		while(cur != null){
			len++;
			cur = cur.next;
		}
		return len;
	}
	//将数据插入到指定位置
	public boolean insertPos(int val,int pos){
		//1、判断pos的合法性
		if(pos < 0 || pos >= getLength()+1){
			return false;
		}
		Entry cur = head;
		for(int i = 0;i <= pos-1;i++){
			cur = cur.next;
		}
		//cur    pos的前一个
		Entry entry = new Entry(val);
		entry.next = cur.next;
		cur.next = entry;
		return true;
	}
	//
	
	//show()
	public void show(){
		/*Entry cur = head;
		while(cur.next != null){
			System.out.println("data:"+cur.next.data);
			cur = cur.next;
		}*/
		Entry cur = head.next;
		while(cur != null){
			System.out.println("data:"+cur.data);
			cur = cur.next;
		}
	}
	
}

public class LianBiao1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

				TestLink1 testlink = new TestLink1();
				
				testlink.insertTail(1330);
				testlink.insertTail(110);
				//1330 110 
				testlink.insertPos(10,0);
				//10 1330 110
				
				if(testlink.insertPos(32,10000)){
					System.out.println("插入成功");
				}else{
					System.out.println("插入失败");
				}
				
				//10 32 1330 110
				
				testlink.show();
				System.out.println(testlink.getLength());
			}

		}
		

输出结果:
这里写图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132427.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 安捷伦频谱仪操作手册_安捷伦频谱仪LAN设置

    安捷伦频谱仪操作手册_安捷伦频谱仪LAN设置频谱分析仪的基本使用方法一、使用前须知在使用频谱分析仪之前,有必要了解一下分贝(dB)和分贝毫瓦(dBm)的基本概念,下面作一简要介绍。1.分贝(dB)分贝是增益的一种电量单位,常用来表示放大器的放大能力、衰减量等,表示的是一个相对量,分贝对功率、电压、电流的定义如下:分贝数:101g(dB)分贝数=201g(dB)分贝数=201g(dB)例如:A功率比B功率大一倍,那么,101gA/B=1018…

    2022年8月11日
    9
  • 网线接口定义

    网线接口定义参考资料:http://blog.csdn.net/dog0138/article/details/7016351因为激光雷达插路由上不能识别IP地址,所以想确认网线接的是否正确,查了一下发现网上说的网线八芯定义都是DTE(数据终端设备)的定义,也即是我们一般用的PC,传感器这些主动传输数据的设备。1输出数据(+)2输出数据(-)3输入数据(+)4保留为电话使用5保

    2022年6月5日
    85
  • rs232 ttl区别(新宝骏RM和RS的区别)

    CMOS电平和TTL电平:CMOS逻辑电平范围比较大,范围在3~15V,比如4000系列(4011与非门),当5V供电时,输出在4.6以上为高电平,输出在0.05V以下为低电平。输入在3.5V以上为高电平,输入在1.5V以下为低电平。    而对于TTL芯片,供电范围在0~5V,常见都是5V,如74系列5V供电,输出在2.7V以上为高电平,输出在0.5V以下为低电平,输入在2V以上为高

    2022年4月10日
    42
  • 回话控制

    回话控制

    2022年2月8日
    33
  • 九个问题从入门到熟悉HTTPS

    九个问题从入门到熟悉HTTPS

    2022年3月12日
    43
  • Git创建分支和查看分支命令「建议收藏」

    Git创建分支和查看分支命令「建议收藏」branch:分支 是指在开发主线中分离出来的,做进一步开发而不影响到原来的主线Git存储的不是一系列的更改集,而是一系列快照,当你执行一次commit时,git存储一个commit对象,她包含它包含一个指针指向你当前需要提交的内容的快照。master分支是在gitinit命令运行时默认创建一个分支,并命名为master1.查看分支gitbranch:列出本地已经存在的分支,…

    2022年8月22日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号