package suanfa;/*** 当年学习数据结构和算法的时候,自己写的一个LinkedList,* 可以看到,LinkedList是动态链表,插入和删除的效率比较高,查询其长度的效率比较低* * 推荐一本学习数据结构和算法的书籍,《数据结构java版》清华大学出版社,译者梁志敏* * @author 台哥  https://blog.csdn.net/chaohi* * @param <T>*/
public class LinkedList<T> {private Node<T> node;private int listSize;// 构造方法public LinkedList() {node = new Node<T>();listSize = 0;}// 在索引index处添加元素public void add(int index, T element) {if (index < 0 || index > listSize) {return;}Node<T> preNode = node;for (int i = 0; i < index; i++)preNode = preNode.next;Node<T> newNode = new Node<T>(element);if (preNode.next != null) {preNode.next.prev = newNode;newNode.next = preNode.next;}newNode.prev = preNode;preNode.next = newNode;listSize++;}// 在尾部添加元素并返回truepublic boolean add(T element) {this.add(listSize, element);return true;}// 返回第一个element元素的索引public int indexOf(T element) {Node<T> curNode = node;for (int i = 0; i <= listSize - 1; i++) {curNode = curNode.next;if (curNode.equals(element))return i;}return -1;}// 返回最后一个element元素的索引public int lastIndexOf(T element) {int index = -1;Node<T> curNode = node;for (int i = 0; i <= listSize - 1; i++) {curNode = curNode.next;if (curNode.equals(element))index = i;}return index;}// 得到索引index处的节点public Node<T> getNode(int index) {Node<T> curNode = node;for (int i = 0; i <= index; i++) {curNode = curNode.next;}return curNode;}// 得到索引index处的元素public T get(int index) {if (index < 0 || index >= listSize) {return null;}return this.getNode(index).value;}// 为索引index处的元素赋值public T set(int index, T element) {if (index < 0 || index >= listSize) {return null;}T previousValue = this.get(index);Node<T> curNode = this.getNode(index);curNode.value = element;return previousValue;}// 删除索引index处的元素public T remove(int index) {if (index < 0 || index >= listSize) {return null;}Node<T> curNode = this.getNode(index);curNode.prev.next = curNode.next;if (curNode.next != null)curNode.next.prev = curNode.prev;listSize--;return curNode.value;}// 删除列表中的element元素public boolean remove(T element) {int index = this.indexOf(element);if (index != -1) {this.remove(index);return true;}return false;}// 返回列表的长度public int size() {return listSize;}// 判断列表是否为空public boolean isEmpty() {return listSize == 0;}// 清空列表public void clear() {node = null;listSize = 0;}// 判断列表中是否存在元素elementpublic boolean contains(T element) {return !(this.indexOf(element) == -1);}// 节点@SuppressWarnings("hiding")private class Node<T> {public T value;public Node<T> prev;public Node<T> next;public Node() {};public Node(T t) {this.value = t;}}// 测试public static void main(String[] args) {LinkedList<String> l = new LinkedList<String>();l.add("台哥");l.add("taigecailing");l.add(1, "当当当当");System.out.println("size=:" + l.size());for (int i = 0; i < l.size(); i++) {System.out.print(l.get(i) + " , ");}System.out.println();l.remove(2);System.out.println(l.get(2));}}

转载于:https://www.cnblogs.com/chaohi/archive/2009/09/23/10698003.html

台哥算法练习 - 自己写的一个LinkedList相关推荐

  1. 台哥算法练习 - 12345变为一万两千三百四十五

    这是十年前,刚刚工作时,一次在群里,看到这问题,随手半小时,写下这代码: package suanfa; /*** 把12345变为一万两千三百四十五* * @author 台哥编程课堂* https ...

  2. 最近在做文本匹配,想到了特征值的算法,自己写了一个文本计算算法。求批判。...

    之前有个需求,就是比较2个文本是否相近. 最牛逼的方法就是用语义去分析,然后比较结果.可是这个性能是在不敢恭维,于是想起了以前做过的人脸识别,使用特征值去操作. 人脸识别当是时把图片转变为一维向量,然 ...

  3. 给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出(算法导论第三版第十章10.4-5)

    给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出.要求除该树本树的存储空间外只能使用固定量的额外存储空间,且过程中不得修改该树,即使是暂时的修改也不允许. (算法导 ...

  4. 给定一个n节点的二叉树,写出一个O(n)时间非递归过程,将该树每个节点关键字输出,可以使用一个栈作为辅助数据结构(算法导论第十章10.4-3)

    给定一个n节点的二叉树,写出一个O(n)时间非递归过程,将该树每个节点关键字输出,可以使用一个栈作为辅助数据结构 (算法导论第十章10.4-3) template<typename T> ...

  5. 给定一个n节点的二叉树,写出一个O(n)时间递归过程,将该树每个节点关键字输出(算法导论第十章10.4-2)

    给定一个n节点的二叉树,写出一个O(n)时间递归过程,将该树每个节点关键字输出 (算法导论第十章10.4-2) #include <iostream> template<typena ...

  6. 最短路径 自己写的一个很简单的模板 dijkstra算法

    根据图论课本上的一个图自己写的一个最短路径的dijkstra算法 #include<stdio.h> const int m=999999999; int main() {int tu[8 ...

  7. 数独求解算法_我如何回到一个老问题,终于写了一个数独求解算法

    数独求解算法 by Ali Spittel 通过Ali Spittel 我如何回到一个老问题,终于写了一个数独求解算法 (How I came back to an old problem and f ...

  8. python写机器人程序_用Python写的一个多线程机器人聊天程序

    本人是从事php开发的, 近来想通过php实现即时通讯(兼容windows).后来发现实现起来特别麻烦, 就想到python.听说这家伙在什么地方都能发挥作用.所以想用python来做通讯模块...所 ...

  9. 老婆离家三周,我写了一个操作系统!

    我出生于1943年,今年已经78岁了,依然战斗编程的第一线,今天给大家讲讲我当年写操作系统的故事...... 我小时候特别喜欢鼓捣电器,玩了10年. 当我去加州大学伯克利分校读电子工程的时候,我发现课 ...

  10. java编程游戏飞机旋转问题_用JAVA写的一个飞机游戏

    根据网上视频教程,用JAVA写的一个飞机程序.先看效果先: 改程序主要应用了面向对象的方法构建,使用了AWT技术和一些双缓冲技术 关键有几个点: 一.双缓冲技术,防止重画造成的屏幕闪烁,可以直接用 p ...

最新文章

  1. 计算机专业英语文章翻译,计算机专业英语英汉双语文章翻译
  2. JSON API免费接口
  3. Java 类型和数据库类型怎么实现相互映射?
  4. rust腐蚀几人组队_直播圈近几年爆火的求生游戏,人渣基本已经凉凉,rust没挂不敢玩...
  5. linux之文件类型
  6. 安卓抓包软件_Packet Capture安卓抓包神器介绍及使用教程
  7. java tiff 压缩_使用Java ImageIO进行Tiff压缩
  8. 解决Mac安装软件的“已损坏,无法打开。 您应该将它移到废纸篓”问题
  9. C++指针、空指针、野指针使用的一些总结
  10. 小程序js车牌号手机号正则表达
  11. Windows 平台上使用 cwRsync做文件同步
  12. 动态水印跟踪去除_PS教程:怎么去除gif动态图片中的水印文字
  13. 数据竞赛:工业互联网算法大赛能源赛道风机轴承剩余寿命预测
  14. log4cpp输出为html文件,Log4cpp学习记录
  15. Ffmpeg 视频教程 向视频中添加文字
  16. 星界边境文本自动翻译机(高级版)使用说明
  17. 网传程序员加班猝死,当事人:我还在写代码
  18. lvds 共模电感_初识共模电感 - yi394517286的博客 - 与非博客 - 与非网
  19. mac电脑备份后的微信聊天记录怎么找
  20. 航空货代系统之国际公务制单

热门文章

  1. qml调用python_QML使用Python的函数
  2. 【NIPS 2018】循环World模型促进策略演变
  3. python2项目出现的错误(UnicodeDecodeError)
  4. springboot2.x中的AOP机制总结(附带demo)
  5. 【问题解决方案】Markdown正文中慎用星号否则容易变斜体
  6. 二:SpringMVC知识整理
  7. fromPromise
  8. xdcms_3.0.1 | 代码审计
  9. 【7001】n阶法雷序列
  10. jquery分页插件精选