注释比较详细,直接上代码!

package XiaoMi;import java.util.HashSet;
import java.util.Set;public class SingleLinkList {//节点class Element {                      //自定义数据结构public Object value = null;      //元素属性public Element nextNode = null;  //元素指针}//节点内容class Value {public String code;public String name;public Value() {}public Value(String code, String name) {this.code = code;this.name = name;}@Overridepublic String toString() {return code + "-" + name;}}//链表头节点private Element header = null;     //引用public static void main(String[] args) {SingleLinkList list = new SingleLinkList();Value value1 = list.new Value("1", "java");Value value2 = list.new Value("2", "c++");Value value3 = list.new Value("3", "c#");Value value4 = list.new Value("4", "vb");list.add(value1);list.add(value2);list.add(value3);list.add(value4);System.out.println("remove vb ?" + list.remove(value4));System.out.println("have c++ ?" + list.contains(value2));System.out.println("have vb ?" + list.contains(value4));System.out.println("list is emptry ? " + list.isEmpty());System.out.println(list);list.clear();System.out.println("list is emptry ? " + list.isEmpty());}//添加一个节点public void add(Object node) {if (header == null) {    //若为空,创建链表头header = new Element();header.value = null;header.nextNode = null;}Element element = new Element();   //把链表头给加上element.value = node;element.nextNode = header.nextNode;header.nextNode = element;}//清空链表public void clear() {header = null;}//是否包含某个元素public boolean contains(Object o) {if (header == null)return false;Element eqEl = header.nextNode;while (eqEl != null) {if (eqEl.value == o) {return true;}eqEl = eqEl.nextNode;}return false;}//重写toString方法,拼接字符串public String toString() {int size = this.size();String print = "";if (size == 0)return print;for (int i = 0; i < size; i++) {print = "," + this.get(i) + print;}print = "[" + print.substring(1) + "]";return print;}//取第i个元素public Object get(int index) {if (header == null)return null;int size = this.size();if (index > (size - 1) || index < 0) {return null;}Element temp = header.nextNode;int i = 0;while (temp != null) {if (index == i) {return temp.value;}i++;temp = temp.nextNode;}return null;}//返回第i个节点元素private Element getElement(int index) {if (header == null)return null;int size = this.size();if (index > (size - 1) || index < 0) {return null;}Element temp = header.nextNode;int i = 0;while (temp != null) {if (index == i) {return temp;}i++;temp = temp.nextNode;}return null;}//链表是否为空public boolean isEmpty() {if (header == null)return true;elsereturn false;}//删除一个节点public boolean remove(Object o) {if (header == null)return false;Element eqPreEl = header;Element eqEl = header.nextNode;while (eqEl != null) {if (eqEl.value == o) {eqPreEl.nextNode = eqEl.nextNode;  //指向它的下一个节点return true;}eqPreEl = eqEl;   //指针向后移动eqEl = eqEl.nextNode;}return false;}//链表的长度public int size() {if (header == null)return 0;Element temp = header.nextNode;int i = 0;while (temp != null) {i++;temp = temp.nextNode;}return i;}/*** 检查环状单链表* * @return*/public boolean checkLoop() {if (header == null)return false;int size = this.size();if (size == 0)return false;Set<Element> set = new HashSet<Element>();for (int i = 0; i < size; i++) {Element el = getElement(i);if (!set.contains(el)) {set.add(el);}if (set.contains(el.nextNode)) {  //如果和set中已有节点重复,则认为有环return true;}}return false;}
}

Java中单链表的实现相关推荐

  1. java中单例的几种写法

    java中单例的几种写法 一单例模式常见的写法 二枚举类型实现单例模式 java中单例的几种写法 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系 ...

  2. Java单链表反转 详细过程

    Java单链表反转 Java实现单链表翻转     [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51119499 (一) ...

  3. java集合—— 链表(java中的所有链表都是双向链表)

    [0]README 0.1) 本文描述转自 core java volume 1, 源代码 diy 的, 旨在理解 java集合-- 链表(java中的所有链表都是双向链表) 的相关知识: 0.2) ...

  4. java查找链表中间元素_如何通过Java单次查找链表的中间元素

    java查找链表中间元素 您如何一次找到LinkedList的中间元素是一个编程问题,在电话采访中经常问Java和非Java程序员. 这个问题类似于检查回文或 计算阶乘 ,有时Interviewer还 ...

  5. JAVA单向链表实现

    JAVA单向链表实现 单向链表 链表和数组一样是一种最常用的线性数据结构,两者各有优缺点.数组我们知道是在内存上的一块连续的空间构成,所以其元素访问可以通过下标进行,随机访问速度很快,但数组也有其缺点 ...

  6. java 查找链表中间元素_java查找链表中间元素_如何通过Java单次查找链表的中间元素...

    java查找链表中间元素 您如何一次找到LinkedList的中间元素是一个编程问题,在电话采访中经常问Java和非Java程序员. 这个问题类似于检查回文或 计算阶乘 ,有时Interviewer还 ...

  7. Java单链表、双端链表、有序链表实现

    Java单链表.双端链表.有序链表实现 原创 2014年03月31日 23:45:35 标签: Java / 单链表 / 双端链表 / 有序链表 65040 单链表: insertFirst:在表头插 ...

  8. java查看链表指定元素_Java 实例 – 链表元素查找

    Java 实例 - 链表元素查找 以下实例演示了使用 linkedlistname.indexof(element) 和 linkedlistname.Lastindexof(elementname) ...

  9. java排序链表冒泡排序_Java中的冒泡排序

    java排序链表冒泡排序 Java Sorting is one of the many aspects of java interview questions. In this post, we w ...

最新文章

  1. MFC中在picture control中显示图像的方法
  2. 六大举措建云管理模式助力企业转型升级
  3. python菱形画法解释_用Python画棱形
  4. qt中判断文件是否存在
  5. js 计算当前时间的前n分钟或后n分钟的时间
  6. 一文解析Apache Avro数据
  7. 基于数据库数据增量同步_基于 Flink SQL CDC 的实时数据同步方案
  8. Oracle11g手动创建数据库方法
  9. 图像处理中各种边缘检测的微分算子简单比较(Sobel,Robert, Prewitt,Laplacian,Canny) 【转】
  10. Spark mapPartition方法与map方法的区别
  11. php执行另一个页面,从另一个PHP脚本执行PHP脚本
  12. plesk 打不开php,如何在 Plesk 中管理 PHP
  13. pr人像磨皮美容插件:Beauty Box for Premiere Pro
  14. 手机端通讯录制作,字母索引查找
  15. 关于jxbrowser-7.19
  16. 7-33 统计素数并求和
  17. 如何将腾讯视频客户端下载的QLV视频格式转换成MP4格式
  18. 个人简历英语及计算机能力怎么写,简历个人能力怎么写(简历中个人能力的填写技巧)...
  19. 用python帮别人写了个文字识别程序
  20. 通过naa在esxi主机上找到物理磁盘的位置

热门文章

  1. 技术实践 | Web 端实现 RTC 视频特效的解决方案
  2. 网易云 IM SDK 4.2.0版本逆袭升级!
  3. 浅析weak指针的实现
  4. 一:Greenplum5.10.2 生产环境安装配置 (系统初始化、安装准备)
  5. java中的序列化和反序列化
  6. 命令行打印文件树列表: tree
  7. yum安装nginx的负载均衡详解
  8. 浅谈a标签属性href的mailto更多用法
  9. JAVA-WBE——spring security 3.2 认证-学习笔记2
  10. Android 检查设备是否存在 导航栏 NavigationBar