1.链表定义

public class LNode
{//1、单链表结点定义(链表=节点—>节点—>节点—>节点—>...   节点=数据域+节点域)public int data;//数据域public LNode nextLNode;//节点域public LNode() {}//构造头节点(不存储data)public LNode(LNode nextNode) {this.nextLNode=nextNode;}public LNode(int data, LNode nextLNode) {this.data = data;this.nextLNode = nextLNode;}
}

2.链表创建

单链表的创建(创建后返回值一定为最初头节点,不然会丢失链表)
头插法

 //(1)头插法创建(生成的链表是逆序的,速度快)public LNode CreatLinkByHead(int[] datas) {LNode lNode = new LNode(null);//头节点,头节点不存储信息for(int i=0;i<datas.length;i++) {LNode newLNode = new LNode(datas[i],null);//新节点if(lNode.nextLNode!=null) {newLNode.nextLNode=lNode.nextLNode; //将链表头节点后面的第一个节点挂在新节点后}lNode.nextLNode=newLNode;//新节点插入到头节点后面}return lNode;}

尾插法

//(2)尾插法创建(生成的链表是顺序的)public LNode CreatLinkByTail(int[] datas) {LNode lNode=new LNode(null);//头节点,头节点不存储信息LNode tempLNode=lNode;//指向头节点for(int i=0;i<datas.length;i++) {LNode newlNode=new LNode(datas[i], null);//新节点while(tempLNode.nextLNode!=null) {//后移,遍历 寻找尾部tempLNode=tempLNode.nextLNode;  }tempLNode.nextLNode=newlNode;  //插到尾部}return lNode;}

3.链表的CRUD

 //(1)查询节点个数public int GetSize(LNode lNode) {int count=0;while (lNode.nextLNode!=null) {count++;lNode=lNode.nextLNode;}return count;}//(2)链表中查找某结点(位置找值)public int GetValue(int index,LNode lNode) {int size=GetSize(lNode);int value=0;if(index<=0||index>size) {return -1;}for(int i=0;i<=size;i++) {if(i<index) {lNode=lNode.nextLNode;}else if(i==index){value=lNode.data;i=size+1;}}return value;}//(2)链表中查找某结点(值找位置,返回节点和index)public Map<String,  Object> GetLNodeAndIndex(int value,LNode lNode){Map< String, Object> map=new HashMap<String, Object>();int size = GetSize(lNode);int index=1;while(lNode.nextLNode.data!=value&&index<size) {index++;lNode=lNode.nextLNode;}if (lNode.nextLNode.data==value) {map.put("根据值查到位置是:", index);map.put("根据值查到前一个节点是:", lNode);}else {map.put("不存在", null);}return map;}//(3)修改某结点的数据域public boolean UpdatLNode(int index,LNode lNode,int data) {int size=GetSize(lNode);if(index<=0||index>size) {return false;}for(int i=0;i<=size;i++) {if(i<index) {lNode=lNode.nextLNode;}else if(i==index){lNode.data=data;i=size+1;}}return true;}//(4)往链表中插入结点public boolean InsertLNode(int index,LNode lNode,int data) {int size=GetSize(lNode);if(index<=0||index>size) {return false;}for(int i=0;i<=size;i++) {if(i<index-1) {lNode=lNode.nextLNode;}else if(i==index-1){LNode newLNode=new LNode(data, null);newLNode.nextLNode=lNode.nextLNode;lNode.nextLNode=newLNode;i=size+1;}}return true;}//(5)删除链表结点public boolean DeleteLNode(int index,LNode lNode) {int size=GetSize(lNode);if(index<=0||index>size) {return false;}for(int i=0;i<=size;i++) {if(i<index-1) {lNode=lNode.nextLNode;}else if(i==index-1){lNode.nextLNode=lNode.nextLNode.nextLNode;i=size+1;}}return true;}

测试类

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope>
</dependency>
public class LNodeTest
{private LNode linkNode=new LNode();//打印单链表public void printLink(LNode linkLNode) {LNode lNode=linkLNode;//指向头节点while(lNode.nextLNode!=null) {System.out.print(lNode.nextLNode.data+" ");lNode=lNode.nextLNode;//后移一位}System.out.println("");}@Testpublic void TestForLNode() {int[] arr= {5,4,6};System.out.print("头节点构造单链表,结果反向:");LNode creatLinkByHead = linkNode.CreatLinkByHead(arr);printLink(creatLinkByHead);System.out.print("尾节点构造单链表,结果正向:");LNode creatLinkByTail = linkNode.CreatLinkByTail(arr);printLink(creatLinkByTail);System.out.println("======头插法crud=========");System.out.println("链表元素个数:"+linkNode.GetSize(creatLinkByHead));int getValue = linkNode.GetValue(4, creatLinkByHead);if(getValue==-1) {System.out.println("根据下标查到值:不存在!");}else {System.out.println("根据下标查到值:"+getValue);}Map<String, Object> map = linkNode.GetLNodeAndIndex(5, creatLinkByHead);for (Entry<String, Object> m : map.entrySet()) {System.out.println(m);}if(linkNode.UpdatLNode(1, creatLinkByHead, 1)) {System.out.print("修改后链表:");printLink(creatLinkByHead);}if(linkNode.InsertLNode(2, creatLinkByHead, 3)) {System.out.print("新增后链表:");printLink(creatLinkByHead);}if(linkNode.DeleteLNode(1, creatLinkByHead)) {System.out.print("删除后链表:");printLink(creatLinkByHead);}}
}

数据结构之链表Java相关推荐

  1. 数据结构之链表(java语言实现)

    链表的底层储存结构: 相对于数组这一需要连续.足够大空间的数据结构,链表只需要利用"指针"将一组零碎的空间(在链表中称之为节点)串联起来,这样就可以避免在创建数组时一次性申请过大的 ...

  2. Java实现自定义队列和树结构_Java数据结构之链表、栈、队列、树的实现方法示例...

    本文实例讲述了java数据结构之链表.栈.队列.树的实现方法.分享给大家供大家参考,具体如下: 最近无意中翻到一本书,闲来无事写几行代码,实现几种常用的数据结构,以备后查. 一.线性表(链表) 1.节 ...

  3. java链表的数据结构_Java数据结构 获取链表(LinkedList)的第一个和最后一个元素

    Java数据结构 获取链表(LinkedList)的第一个和最后一个元素 以下实例演示了如何使用 LinkedList 类的 linkedlistname.getFirst() 和 linkedlis ...

  4. java城市链表_数据结构城市链表 1. 城市链表 [问题描述]将若干城市的信息 联合开发网 - pudn.com...

    数据结构城市链表 所属分类:文章/文档 开发工具:Java 文件大小:174KB 下载次数:7 上传日期:2017-12-18 18:37:53 上 传 者:叁佰 说明:  1. 城市链表 [问题描述 ...

  5. Java数据结构之链表(单链表)

    文章目录 一.链表 概念 结构 二.无头单链表 图解 代码实现 特点 三.带头单链表 为何引入带头单链表 代码实现 注意 提示:以下是本篇文章正文内容,Java系列学习将会持续更新 一.链表 概念 链 ...

  6. 浅谈:数据结构之单链表,java代码演示单链表

    单链表 本文是观看尚硅谷韩老师视频学习总结,部分来源网络. 单链表介绍 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每 ...

  7. 《LeetCode力扣练习》第160题 相交链表 Java

    <LeetCode力扣练习>第160题 相交链表 Java 一.资源 题目: 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点.如果两个链表不存 ...

  8. 20175330 数据结构-单链表(选做)

    要求 参见附件,补充MyList.java的内容,提交运行结果截图(全屏) 课下推送代码到码云 ``` public class MyList {     public static void mai ...

  9. 数据结构和算法(Java)-张晨光-专题视频课程

    数据结构和算法(Java)-579人已学习 课程介绍         如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功. 想写出精炼.优秀的代码,不通过不断的锤炼,是很难做到的 ...

最新文章

  1. win10下使用python访问vmbox中的redis
  2. Python入门100题 | 第049题
  3. PyCharm去掉满屏的波浪线
  4. 重物码垛搬运机器人_搬运码垛机器人的特点及应用
  5. pycharm 安装与激活
  6. Android静态安全检测 - Broadcast Receiver组件暴露
  7. NYOJ-491 幸运三角形
  8. CV新赛事:口罩佩戴检测
  9. Gridview隐藏列和隐藏列的取值问题
  10. linux下创建svn仓库及用户
  11. 配置Typescript+Node环境
  12. php5.3 本地调试,php5.3 xdebug 调试器安装配置
  13. Oracle数据库学习思维导图
  14. 数据结构-顺序表(SqList)
  15. PDF文件页面大小不一致的解决办法
  16. 3. lambda 方法引用
  17. JVM-内存区域 堆、方法区,虚拟机栈、程序计数器详解
  18. 【云原生 • Kubernetes】认识 k8s 网络、外部网络访问 k8s 内部服务
  19. PowerDesigner Excel导入信息
  20. Camshift的优点与缺点

热门文章

  1. python类函数的有效调用
  2. 关于类似新浪微博的后台问题
  3. 为什么有些共同生活在一起很多年的夫妻,遇到男方破产或者有负债的情况时女方会离开男方?...
  4. 一篇文章带你揭开嵌入式与物联网的神秘面纱
  5. python定义函数,求出最大值最小值
  6. 博客园迎新春对联大赛 -[已圆满结束]
  7. centos7 5台机器集群环境初始化
  8. 人生最大的资本是品行
  9. Linux环境下LLVM + clang安装
  10. CodeForces 6D Lizards and Basements 2 (dfs)