手写链表的Java实现

package test;class Node{
//  数据域private Object ele;
//  指针域private Node node;
//  默认构造器,标准构造器public Node() {this(null,null);}public Node(Object ele,Node node) {this.ele=ele;this.node=node;}
//  设置操作数据域的接口方法public Object getEle() {return ele;}public void setEle(Object ele) {this.ele = ele;}
//  设置操作指针域的接口方法public Node getNext() {return node;}public void setNext(Node node) {this.node = node;}
}class AB{//    比较两个元素是否相等(引用比较)public static boolean compare(Node a,Node b) {if (a.getEle()==b.getEle() && a.getNext()==b.getNext())return true;return false;}// 比较两个元素是否相等(内容比较)
//  必须重写  节点 数据对象的 equalspublic static boolean compareContent(Node a,Node b) {if (a.getEle().equals(b.getEle()))return true;return false;}
}/*** 说明:*  本链表的构造函数默认为有头空链表,*  需要添加元素请使用 add /insert / preAdd;*  由于节点之间比较的复杂性,本链表节点之间的比较特别定义使用了  AB *  这个类的 compare方法,应对更多的情况。* @author Tomsan**/public  class ListSLinked{
//  链表的首节点(有头节点)private Node head;
//  链表的大小private int size;
//  使用默认构造方法;创建有头空链表public ListSLinked() {this.head = new Node();}//    判空public boolean isEmpty() {return this.size==0;}
//  返回链表的大小public int getSize() {return size;}//    获取某个元素e节点的前驱节点(引用有效)public Node getPre(Node e) {Node temp = this.head;// head 不是元素,而是空表头while (temp.getNext() != null) {Node pre = temp;temp = temp.getNext();if (temp == e) return pre;}return null;}//  获取 i 号 节点的元素的前驱节点public Node getPre(int i) {if (i>this.size-1) return null;Node temp = this.head;for (int j=0; j<=i;j++) {temp = temp.getNext();}return temp;}// 获取 i 号元素所在的节点public Node getEleById(int i) {Node pre = getPre(i);return pre.getNext();}//  内容判断链表是否含有元素 epublic boolean contain(Node e) {Node temp = this.head;while (temp.getNext()!=null) {temp = temp.getNext();if (AB.compareContent(temp, e)) { // 用到AB类的比较策略return true;}}return false;}//    判断 e 在链表中的 idpublic int getIdByEle(Node e) {Node temp = this.head;int id = -1;while (temp.getNext()!=null) {id++;temp = temp.getNext();if (AB.compareContent(temp,e))return id;}return -1;}// 在 i 号位置插入 元素public boolean insertEle(int i,Node e) {Node temp = this.head;if (0<=i && i<=size) {
//          先找到 第 i-1 号 元素 for (int j=0;j<i;j++) {temp = temp.getNext();}Node tempLast = temp.getNext();temp.setNext(e);e.setNext(tempLast);this.size++;return true;}return false;}// 删除 i 号 元素public boolean delete(int i) {Node temp = this.head;if (0<i && i<=size) {
//          先找到 第 i-1 号 元素 for (int j=0;j<i;j++) {temp = temp.getNext();}temp.setNext(temp.getNext().getNext());return true;}return false;}//    尾部添加元素public void append(Node node) {Node temp = head;
//      链表不为空while(temp.getNext()!=null) {temp = temp.getNext(); }temp.setNext(node);
//      如果只含链表头if (head.getNext()== null) {temp.setNext(node);}this.size++;}//  打印链表内容public void printLindedList() {Node temp = this.head;while (temp.getNext()!=null) {temp = temp.getNext();System.out.print(temp.getEle()+"  ");}}}

测试Java链表

package test;public class Test {public static void main(String[] args) throws InterruptedException {ListSLinked ls = new ListSLinked();//       构造20个元素的链表for(int i=0; i<20;i++) {ls.append(new Node("ok"+i,null));}
//       显示列表结果System.out.println("构造20个元素的链表");ls.printLindedList();//       在序号 2 处插入元素 Node("第三")ls.insertEle(2, new Node("第三  ",null));
//       显示列表结果System.out.println("\n插入第三");ls.printLindedList();//       删除 第 i 号元素ls.delete(2);
//       显示列表结果System.out.println("\n删除第三");ls.printLindedList();//       是否包含某元素boolean flag = ls.contain(new Node("ok2",null));
//       显示列表结果System.out.println("是否包含"+ flag);}}

Java 数据结构与算法面试 链表相关推荐

  1. Java数据结构和算法(四)--链表

    日常开发中,数组和集合使用的很多,而数组的无序插入和删除效率都是偏低的,这点在学习ArrayList源码的时候就知道了,因为需要把要 插入索引后面的所以元素全部后移一位. 而本文会详细讲解链表,可以解 ...

  2. java数据结构与算法面试,java面试手写代码

    前言 总有一天你会明白,你的努力终究没有白费 年前辞职,人算不如天算,突如其来的疫情完全把自己的计划给打碎了,面试难度简直不亚于一场江苏高考题,后悔.焦虑不安.失眠成了我的生活状态. 从三月底开始投递 ...

  3. Java数据结构与算法 day02 链表

    文章目录 第三章 链表 单链表介绍和内存布局 单链表创建和遍历的分析实现 添加(创建)过程 遍历过程 代码实现 单链表按顺序插入节点 单链表节点的修改 单链表节点的删除和小结 单链表面试题 新浪面试题 ...

  4. 一文通数据结构与算法之——链表+常见题型与解题策略+Leetcode经典题

    文章目录 1 链表 1.1 常见题型及解题策略 1.1.1 LeetCode中关于链表的题目有以下五种类型题: 1.1.2 解题策略 1.2 链表的基本内容 1.2.1 链表的基本结构: 1.2.2 ...

  5. java数据结构与算法之顺序表与链表深入分析

    转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结 ...

  6. java数据结构与算法之双链表设计与实现

    转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/53047590 出自[zejian的博客] 关联文章: java数据结 ...

  7. 【Java面试高频问题】Java数据结构和算法基础知识汇总

    文章目录 Java数据结构和算法基础知识 一.Java数据结构 1. 线性结构:数组.队列.链表和栈 1.1 数组(Array) 1.2 稀疏数组 1.3 队列(Queue) 1.4 链表(Linke ...

  8. JAVA数据结构与算法【简单介绍】

    前几天去面一个大厂,面试官特别好,面试官说到,我们的学习不能本末倒置,数据结构和算法是程序的基础,如果数据结构你没有学好,你真正意义上不算会写代码.你的代码是各处粘贴,杂乱无章的. 由于现在大多用JA ...

  9. 视频教程-Python数据结构与算法面试(上)-Python

    Python数据结构与算法面试(上) 东北大学计算机专业硕士研究生,欧瑞科技创始人&CEO,曾任国内著名软件公司项目经理,畅销书作者,企业IT内训讲师,CSDN学院专家讲师,制作视频课程超过1 ...

最新文章

  1. JavaScript 开发者数量暴涨、C# 超越 PHP,揭晓全球开发最新趋势!
  2. 一蹴而就的解释是什么_聪明的孩子喜欢问“为什么”,还是喜欢问“为什么”让孩子聪明?...
  3. 如何从我的Android应用程序发送电子邮件?
  4. chapter13 机器学习之利用PCA简化数据
  5. day10 in india
  6. (*长期更新)软考网络工程师学习笔记——Section 14 Linux服务器配置
  7. 一文教你如何深入机器学习,从编程基础到完整的项目实战
  8. Delphi第三方控件安装卸载指南
  9. iperf基本使用方式
  10. python调用cplex_python 调用cplex(设置 CPLEX 的 Python API)
  11. 信号与系统的基本概念与通信系统模型
  12. 研发、运营必备实用工具网站
  13. de4dot构建过程
  14. C语言程序输入一个三位数取个位十位百位
  15. 决策树--CART算法
  16. 低版本的iphone 无法跑在xcode8上
  17. java 对象给对象赋值为空_Java对象不使用时赋值null的意义详解
  18. matlab中position用法_Matlab中的zeta函数用法
  19. JAVA外卖订餐系统毕业设计 开题报告
  20. 计算机输入开机密码无法进入,电脑开机无法输入密码怎么办

热门文章

  1. 直接学python3_学习python用python2还是python3
  2. log4j mysql 单引号_log4j写数据库存在单引号问题
  3. android studio 2.3.1 r丢失,AndroidStudio中 R文件缺失的办法
  4. SpringBoot 2 快速整合 RabbitMQ
  5. JDBC开发之数据库连接池
  6. easyexcel导入获取表头并且表头为不固定列
  7. android中setText不能传int值
  8. FastStone Capture 注册码 序列号
  9. 修改pip安装源加快python模块安装
  10. linux 环境下安装oracle11g方法及安装过程中遇上的问题解决方法