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 ...
随机推荐
- CF374 Maxim and Array
贪心 如果有0先变成非0 如果负数的个数 应该变为偶数 之后就是每次将绝对值最小的值加K #include<bits/stdc++.h> using namespace std; cons ...
- 【转载】Apache Spark Jobs 性能调优(二)
调试资源分配 Spark 的用户邮件邮件列表中经常会出现 "我有一个500个节点的集群,为什么但是我的应用一次只有两个 task 在执行",鉴于 Spark 控制资源使用的参数 ...
- 【BZOJ1096】【ZJOI2007】仓库建设(斜率优化,动态规划)
[BZOJ1096][ZJOI2007]仓库建设(斜率优化,动态规划) 题面 Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原 ...
- 【BZOJ4554】游戏(二分图匹配,网络流)
[BZOJ4554]游戏(二分图匹配,网络流) 题解 Description 在2016年,佳缘姐姐喜欢上了一款游戏,叫做泡泡堂.简单的说,这个游戏就是在一张地图上放上若干个炸弹,看 是否能炸到对手, ...
- SQL语句的学习理解
1.手电筒当天下载自定义活跃: SELECT user_dim.app_info.app_instance_id FROM [flashlight35-6aae4:com_scroll_sos_fla ...
- createjs绘制扇形的方法
扇形由三段线条组成,两条直线和一条弧线,直线可以用createjs中的lineTo函数画出,弧线用Graphics.arc函数来画. 一.关于createjs中的Graphics.Arc API Gr ...
- Angular4--提速--提升Angular项目的首页打开速度(包含微信登录优化)
Angular项目的首页打开速度很慢,有时候会有几秒的加载时间.如果在手机端访问的话,怕是要等待十多秒,这对用户体验很差.下面参考http://www.cnblogs.com/feiyu159/p/8 ...
- python实现一般最小二乘系统辨识方法
问题: 对于一个未知参数的系统,往往需要用到系统辨识的方法,例如对于一个单输入单输出系统: Z(k)+a1*Z(k-1)+a2*Z(k-2)=b1*U(k-1)+b2*U(k-2)+V(k) 其中:V ...
- BZOJ4825 单旋
分析:一道水题,去年考场发现了特点但是不会splay维护挂了,然后现在我写了个treap. 画一画图就可以解决这道题了,自己试一下. 代码如下: #include<bits/stdc++.h&g ...
- animation,transform属性
animation属性 使用@keyfarmes属性开启动画步骤 结构体:@keyfarmes name{ from{ } to{ } } @keyfarmes name{ 0%{ } 50%{ } ...