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# 通过smtp服务器进行邮件发送 MailHelper
C# 通过smtp服务器进行邮件发送 MailHelper.cs using System; using System.Data; using System.Configuration; using ...
- 芝麻HTTP:如何寻找爬虫入口
寻找爬虫入口 1 .本次任务的入口 这个爬虫的更好的入口就是我们平常使用的搜索引擎.搜索引擎虽然有很多种,但是其实都是在干一件事,收录网页,处理,然后提供搜索服务.在平时使用的过程中,我们通常都是直接 ...
- 小白学爬虫-在无GUI的CentOS上使用Selenium+Chrome
爬虫代理IP由芝麻HTTP服务供应商提供各位小伙伴儿的采集日常是不是被JavaScript的各种点击事件折腾的欲仙欲死啊?好不容易找到个Selenium+Chrome可以解决问题! 但是另一个▄█▀█ ...
- 使用定时器限制点击按钮发送短信(附源码)--JavaScript小案例
不说多哈,有注释哦,直接贴代码了哈,有疑问请追评呢…… 1.禁用按钮: this.disabled = "disabled"(this指按钮)或: this.disabled = ...
- PyTorch官方中文文档:torch.optim
torch.optim torch.optim是一个实现了各种优化算法的库.大部分常用的方法得到支持,并且接口具备足够的通用性,使得未来能够集成更加复杂的方法. 如何使用optimizer 为了使用t ...
- 端口被占用:android studio 虚拟机adb.exe已停止工作的处理
浏览:2190 | 更新:2017-09-16 05:00 1 2 3 4 5 6 分步阅读 在搭建android studio开发环境后,开始编程调试程序时,不管运行虚拟机还是真机,都不停出现&qu ...
- MySQL的B树索引与索引优化
MySQL的MyISAM.InnoDB引擎默认均使用B+树索引(查询时都显示为"BTREE"),本文讨论两个问题: 为什么MySQL等主流数据库选择B+树的索引结构? 如何基于索引 ...
- Splay入门解析【保证让你看不懂(滑稽)】
BST真是神奇的东西... 而且种类好多呀... 我这个蒟蒻只学会了splay orzCJ老爷,各种树都会 好好好,不说了,直接说splay. 不知道splay是啥,,你也要知道平衡树是啥... 平衡 ...
- THUWC2018咸鱼记
Day -inf 好不容易联赛水进来了 好虚啊...(萌新)什么都不会...只会大水题 估计要\(GG\)了,瑟瑟发抖 准备辣.. 自我介绍根本没面试,就没脸贴了 周围的大佬们(尤其\(Zsy\))还 ...
- Dapper一个和petapoco差不多的轻量级ORM框架
我们都知道ORM全称叫做Object Relationship Mapper,也就是可以用object来map我们的db,而且市面上的orm框架有很多,其中有一个框架 叫做dapper,而且被称为th ...