台哥算法练习 - 自己写的一个LinkedList
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相关推荐
- 台哥算法练习 - 12345变为一万两千三百四十五
这是十年前,刚刚工作时,一次在群里,看到这问题,随手半小时,写下这代码: package suanfa; /*** 把12345变为一万两千三百四十五* * @author 台哥编程课堂* https ...
- 最近在做文本匹配,想到了特征值的算法,自己写了一个文本计算算法。求批判。...
之前有个需求,就是比较2个文本是否相近. 最牛逼的方法就是用语义去分析,然后比较结果.可是这个性能是在不敢恭维,于是想起了以前做过的人脸识别,使用特征值去操作. 人脸识别当是时把图片转变为一维向量,然 ...
- 给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出(算法导论第三版第十章10.4-5)
给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出.要求除该树本树的存储空间外只能使用固定量的额外存储空间,且过程中不得修改该树,即使是暂时的修改也不允许. (算法导 ...
- 给定一个n节点的二叉树,写出一个O(n)时间非递归过程,将该树每个节点关键字输出,可以使用一个栈作为辅助数据结构(算法导论第十章10.4-3)
给定一个n节点的二叉树,写出一个O(n)时间非递归过程,将该树每个节点关键字输出,可以使用一个栈作为辅助数据结构 (算法导论第十章10.4-3) template<typename T> ...
- 给定一个n节点的二叉树,写出一个O(n)时间递归过程,将该树每个节点关键字输出(算法导论第十章10.4-2)
给定一个n节点的二叉树,写出一个O(n)时间递归过程,将该树每个节点关键字输出 (算法导论第十章10.4-2) #include <iostream> template<typena ...
- 最短路径 自己写的一个很简单的模板 dijkstra算法
根据图论课本上的一个图自己写的一个最短路径的dijkstra算法 #include<stdio.h> const int m=999999999; int main() {int tu[8 ...
- 数独求解算法_我如何回到一个老问题,终于写了一个数独求解算法
数独求解算法 by Ali Spittel 通过Ali Spittel 我如何回到一个老问题,终于写了一个数独求解算法 (How I came back to an old problem and f ...
- python写机器人程序_用Python写的一个多线程机器人聊天程序
本人是从事php开发的, 近来想通过php实现即时通讯(兼容windows).后来发现实现起来特别麻烦, 就想到python.听说这家伙在什么地方都能发挥作用.所以想用python来做通讯模块...所 ...
- 老婆离家三周,我写了一个操作系统!
我出生于1943年,今年已经78岁了,依然战斗编程的第一线,今天给大家讲讲我当年写操作系统的故事...... 我小时候特别喜欢鼓捣电器,玩了10年. 当我去加州大学伯克利分校读电子工程的时候,我发现课 ...
- java编程游戏飞机旋转问题_用JAVA写的一个飞机游戏
根据网上视频教程,用JAVA写的一个飞机程序.先看效果先: 改程序主要应用了面向对象的方法构建,使用了AWT技术和一些双缓冲技术 关键有几个点: 一.双缓冲技术,防止重画造成的屏幕闪烁,可以直接用 p ...
最新文章
- 计算机专业英语文章翻译,计算机专业英语英汉双语文章翻译
- JSON API免费接口
- Java 类型和数据库类型怎么实现相互映射?
- rust腐蚀几人组队_直播圈近几年爆火的求生游戏,人渣基本已经凉凉,rust没挂不敢玩...
- linux之文件类型
- 安卓抓包软件_Packet Capture安卓抓包神器介绍及使用教程
- java tiff 压缩_使用Java ImageIO进行Tiff压缩
- 解决Mac安装软件的“已损坏,无法打开。 您应该将它移到废纸篓”问题
- C++指针、空指针、野指针使用的一些总结
- 小程序js车牌号手机号正则表达
- Windows 平台上使用 cwRsync做文件同步
- 动态水印跟踪去除_PS教程:怎么去除gif动态图片中的水印文字
- 数据竞赛:工业互联网算法大赛能源赛道风机轴承剩余寿命预测
- log4cpp输出为html文件,Log4cpp学习记录
- Ffmpeg 视频教程 向视频中添加文字
- 星界边境文本自动翻译机(高级版)使用说明
- 网传程序员加班猝死,当事人:我还在写代码
- lvds 共模电感_初识共模电感 - yi394517286的博客 - 与非博客 - 与非网
- mac电脑备份后的微信聊天记录怎么找
- 航空货代系统之国际公务制单