Java 自定义实现链表
自定义实现链表很简单,只需要明白链表是什么样子的数据结构。
下图表示一种单向列表。其中指针first指向队头,last指向队尾,curr指向当前读的数据。

下面是我的实现代码,很简单,明白上述结构后,关键是构造一个内部类,里面包含一个指向下一个元素的对象(指向下一个元素的指针)
public class MyLinkedList<T>{
/**
* 指向list中最后一个元素
*/
Node<T> last;
/**
* 指向list中第一个元素
*/
Node<T> first;
/**
* 指向当前读取的元素
*/
Node<T> currRead;
private int size ;
/**
* <默认构造函数>
*/
public MyLinkedList(){
size = 0;
last = new Node(null,-1);
first = last;
currRead = first;
}
/**
* 往链表中添加数据(队尾添加数据)
* <功能详细描述>
* @param element
* @return
* @see [类、类#方法、类#成员]
*/
public T add(T element){
Node<T> newNode = new Node<T>(null,element);
last.next = newNode;
last = newNode;
if(size == 0){
first = newNode;
}
size ++;
return element;
}
/**
* 移除链表中的数据(队头移除)
* <功能详细描述>
* @return
* @see [类、类#方法、类#成员]
*/
public T remove(){
if(size == 0){
System.out.println("empty list ");
currRead = first;
return null;
}
T result = first.element;
first = first.next;
currRead = first;
size--;
return result;
}
/**
* 获取队列中的元素
* <功能详细描述>
* @return
* @see [类、类#方法、类#成员]
*/
public T get(){
if(currRead.next == null){
setReadAgain();
return currRead.element;
}
T result = currRead.element;
currRead = currRead.next;
return result;
}
/**
* 再次从头开始读取数据
* <功能详细描述>
* @see [类、类#方法、类#成员]
*/
public void setReadAgain() {
currRead = first;
}
public String toString(){
StringBuilder sb = new StringBuilder();
for(int i=0;i<size;i++){
T ele = get();
sb.append(currRead.element + "-->");
}
return sb.toString();
}
/**
* 获取队列大小
* <功能详细描述>
* @return
* @see [类、类#方法、类#成员]
*/
public int getSize(){
return this.size;
}
class Node<T> {
Node<T> next;
T element;
public Node( Node<T> next, T element){
this.next = next;
this.element = element;
}
}
实践一下,看能不能使用
public class Test {
public static void main(String[] args){
MyLinkedList linkedList = new MyLinkedList();
System.out.println("-------start-------");
System.out.println(linkedList.toString());
for (int i=0;i<5;i++){
linkedList.add(i+1);
}
System.out.println(linkedList.toString());
for(int i=0;i<5;i++){
System.out.println(linkedList.remove());
}
System.out.println(linkedList.toString());
System.out.println("-------end-------");
}
下面是结果

Java 自定义实现链表的更多相关文章
- java自定义注解类
一.前言 今天阅读帆哥代码的时候,看到了之前没有见过的新东西, 比如java自定义注解类,如何获取注解,如何反射内部类,this$0是什么意思? 于是乎,学习并整理了一下. 二.代码示例 import ...
- Java实现单链表的各种操作
Java实现单链表的各种操作 主要内容:1.单链表的基本操作 2.删除重复数据 3.找到倒数第k个元素 4.实现链表的反转 5.从尾到头输出链表 6.找到中间节点 7.检测链表是否有环 8.在 ...
- java自定义注解实现前后台参数校验
2016.07.26 qq:992591601,欢迎交流 首先介绍些基本概念: Annotations(also known as metadata)provide a formalized way ...
- java自定义注解注解方法、类、属性等等【转】
http://anole1982.iteye.com/blog/1450421 http://www.open-open.com/doc/view/51fe76de67214563b20b385320 ...
- JAVA自定义注释(Target,Retention,Documented,Inherit)
java自定义注解 Java注解是附加在代码中的一些元信息,用于一些工具在编译.运行时进行解析和使用,起到说明.配置的功能.注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用.包含在 java.l ...
- Java自定义日志输出文件
Java自定义日志输出文件 日志的打印,在程序中是必不可少的,如果需要将不同的日志打印到不同的地方,则需要定义不同的Appender,然后定义每一个Appender的日志级别.打印形式和日志的输出路径 ...
- Java自定义简单标签
Java自定义简单标签可以方便的在页面输出信息,并且对于权限的控制,和对于Jsp标签和servlet代码的分离有着很好的作用. 下面将以权限的控制为例自定义一个标签: 一.标签类型 <wxt: ...
- java自定义注解知识实例及SSH框架下,拦截器中无法获得java注解属性值的问题
一.java自定义注解相关知识 注解这东西是java语言本身就带有的功能特点,于struts,hibernate,spring这三个框架无关.使用得当特别方便.基于注解的xml文件配置方式也受到人们的 ...
- java实现单链表的增删功能
JAVA 实现单链表的增删功能 package linked; class LinkedTable{ } public class LinkedTableTest { public static vo ...
随机推荐
- C# 文件copy和文件删除
C# 文件copy和文件删除 public bool CopyFile(string SourcePath, string CopyPathFoder) { bool bfg = false; if ...
- 如何登录mysql? cmd怎么连接mysql数据库||从MYSQL客户端登录MYSQL
1 2 3 4 5 6 7 分步阅读 Mysql开源数据库,任何人都可以下载安装使用.那么安装好的mysql如何登陆连接mysql数据库呢?本经验咗嚛介绍几种常见的方法 工具/原料 mysql 连 ...
- ASP.NET CORE的Code Fist后Models更改了怎么办?
上次我写到MVC的code fist后,自动生成数据库并自动生成web页面了 点击打开链接 那么随着项目需求的逐步明确,model变化了怎么办呢?其实和上次一样的,有两条关键的语句要记住 Add-Mi ...
- Emacs配置(考场必备)(Emacs)
最近有几次离开自己一直坐着的座位,去别的机房考试了. 于是猛然想起来要记一记Emacs的简洁配置了. 算是把NOIP残存的记忆再拾一点起来...... 附上一些解释 (global-set-key [ ...
- [CF940F]Machine Learning
codeforces 一句话题意 求区间数字出现次数的mex,带修改 sol 带修膜队不解释 带修膜队的排序! struct query{ int id,l,r,t; bool operator &l ...
- [BZOJ3110] [Zjoi2013] K大数查询 (树套树)
Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置 ...
- highCharts实现简单柱形图
js: function chart(data,title){ $('#container').highcharts({ chart: { type: 'bar' }, title: { text: ...
- window.close(); 关闭浏览器窗口js代码
序号 关闭代码 需要确认 无任何作用 无需确认 测试 1 window.close() IE7 firefox,chrome,safari Opera Close 2 window.opener=nu ...
- 解决linux安装软件:/lib/ld-linux.so.2: bad ELF interpreter问题
问题:64位系统中安装了32位程序解决办法 是因为64位系统中安装了32位程序 解决方法: yum install glibc.i686
- jsp常见jstl语法(二)
<c:choose>标签与Javascript switch语句的功能一样,用于在众多选项中做出选择. 语法格式 <c:choose> <c:when test=&quo ...