MyLinkedList
/**
* 节点类
* @author JP
*
*/
class Node {
Object value;//节点元素值
Node pre;//上一个节点
Node next;//下一个节点 public Node(Object value) {
this.value = value;
}
} /**
* 链表类
* @author JP
*
*/
public class MyLinkedList {
Node cur;//目前指向的节点
Node head;//头结点
Node end;//尾节点
int size = 0; /**
* 实例化头节点和尾节点
*/
public MyLinkedList() { head = new Node("head");
end = new Node("end");
//设置头尾相连
head.next = end;
end.pre = head;
} /**
* 增加操作
* @param value
*/
public void add(Object value) {
//判断当前插入的元素是否是第一个元素
if (cur == null) {
cur = new Node(value);
head.next = cur;
cur.pre = head; } else {
Node node = new Node(value);
cur.next = node;
node.pre = cur;
cur = node;//将cur元素设置为当前插入的节点
}
cur.next = end;
end.pre = cur;
size++;
} /**
* 在指定位置插入元素,第一个元素的下标为0
* @param index
* @param value
* @throws Exception
*/
public void add(int index, Object value) throws Exception { //判断当前要插入的元素是否为链表的最后一个元素
if (index == size) {
this.add(value);
} else {
Node tmp = this.get(index);//当前index位置所对应的节点
Node node = new Node(value);//当前要插入的节点 tmp.pre.next = node;
node.pre = tmp.pre;
node.next = tmp;
tmp.pre = node;
}
size++;
} /**
* 删除指定位置的元素,第一个元素的下标为0
* @param index
* @throws Exception
*/
public void remove(int index) throws Exception { Node tmp = this.get(index);//当前index位置所对应的节点
tmp.pre.next = tmp.next;
tmp.next.pre = tmp.pre;
size--;
} /**
* 获取指定位置的节点元素
* @param index
* @return
* @throws Exception
*/
public Node get(int index) throws Exception {
if (index < 0 || index >= size) {
throw new Exception("数组下标越界!");
}
Node node = head.next;
for (int i = 1; i <= index; i++) { node = node.next;//迭代为下一个节点
}
return node;
} /**
* 将链表转化成数组
* @return
*/
public Object[] toArray() {
Object[] arr = new Object[size];
Node node = head.next;
for (int i = 0; i < arr.length; i++) { arr[i] = node.value;
node = node.next;//迭代为下一个节点
} return arr;
} public static void main(String[] args) throws Exception {
MyLinkedList list = new MyLinkedList();
list.add(1);
list.add(2); list.add(3);
list.add(4);
//list.remove(4);
//list.add(4,"a"); Object[] arr = list.toArray();
for (Object obj : arr) {
System.out.println(obj);
} }
}
MyLinkedList的更多相关文章
- 3.5 MyLinkedList 实现
3.5 MyLinkedList 类的实现 MyLinkedList 将用双链表实现,并且还需要保留该表两端的引用.这将需要三个类 MyLinkedList 类,包含到两端的链.表的大小以及一些方法. ...
- 深入理解java中的ArrayList和LinkedList
杂谈最基本数据结构--"线性表": 表结构是一种最基本的数据结构,最常见的实现是数组,几乎在每个程序每一种开发语言中都提供了数组这个顺序存储的线性表结构实现. 什么是线性表? 由0 ...
- Java实现单链表的各种操作
Java实现单链表的各种操作 主要内容:1.单链表的基本操作 2.删除重复数据 3.找到倒数第k个元素 4.实现链表的反转 5.从尾到头输出链表 6.找到中间节点 7.检测链表是否有环 8.在 ...
- 数据结构(Java描述)之线性表
基础概念 数据结构:是相互之间存在一种或多种关系的数据元素的集合. 逻辑结构和物理结构 关于数据结构,我们可以从逻辑结构和物理结构这两个维度去描述 逻辑结构是数据对象中数据元素之间的关系,是从逻辑意义 ...
- 自定义Java集合
一.泛型 1.在JDK1.4以前,所有的集合元素全都按照Object来存储,拿出来还要进行强制转型.由于这样的做法有太多的缺点,容易出现ClassCaseException,不安全,让人不省心,于是乎 ...
- Java Iterator, ListIterator 和 foreach语句使用
Java Iterator, ListIterator 和 foreach语句使用 foreach语句结构: for(part1:part2){part3}; part2 中是一个数组对象,或者是带 ...
- java基础语法要点<二>(基于1.8)
注解(元数据) 从jdk5 开始,java支持在源文件中嵌入补充信息,称为注释(annotation).注释不会改变程序的动作,也就不会改变程序的语义.但在开发和部署期间,各种工具可以使用这类信息.元 ...
- 约瑟夫环的java解决
总共3中解决方法,1.数学推导,2.使用ArrayList递归解决,3.使用首位相连的LinkedList解决 import java.util.ArrayList; /** * 约瑟夫环问题 * 需 ...
- [AaronYang]C#人爱学不学[4]
本文章不适合入门,只适合有一定基础的人看.我更相信知识细节见高低,我是从4.0开始学的,终于有时间系统的学习C#5.0,是5.0中的知识,会特殊标记下.但写的内容也可能含有其他版本framework的 ...
随机推荐
- zoj2901【DP·二进制优化】
题意: 要排一个L长度的序列,当 j 放在 i 后面的时候会增加v[ i ][ j ]的值,求构成L长度序列的最大值. 思路: 可以想到预处理任意两点<i,j>的最大值是多少,然后题目还有 ...
- 洛谷P1137 旅行计划
P1137 旅行计划 题目描述 小明要去一个国家旅游.这个国家有N个城市,编号为1-N,并且有M条道路连接着,小明准备从其中一个城市出发,并只往东走到城市i停止. 所以他就需要选择最先到达的城市,并制 ...
- angular实现表格的分页显示
最近项目中用到了一个功能,就是表格的分页显示.以前没整过,今天学会了,把它整理一下,下次可以直接用. 实例代码:https://github.com/dreamITGirl/projectStudy ...
- PJzhang:子域名发掘工具Sublist3r
猫宁!!! 参考链接:https://www.freebuf.com/sectool/90584.html 作者上一次更新是2018年10月16日了,sublist3r中融合有另外一个子域名爆破工具S ...
- PHP闭包和匿名函数
概念 闭包和匿名函数在PHP5.3.0中被引入. 闭包 闭包是指创建时封装周围环境的函数.即使闭包所在的环境不存在了,闭包中封装的状态依然存在.这个概念很难理解,不过没关系,继续看下去就会明白了. 匿 ...
- [NOI2002] 贪吃的九头蛇
考虑任意一种划给大头的方案,两端的都给了大头(bel=1)的边产生难受值,剩下n-k个果子分给m-1个头,当m-1=1时,两端都给了这个小头也产生难受值:而m-1>1的情况要好看的多,贪心的,因 ...
- MySQL 的视图、触发器、事务、存储过程、函数
MySQL 的视图.触发器.事务.存储过程.函数 阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句 ...
- 首次开发H5长图页总结
首次开发H5长图页总结. 资源统一加载 资源统一加载, 分开获取 定义资源标识符 在src/resources目录下 定义各个资源模块. 在Asset.js中获取定义好的所有模块, 循环出具体的文件路 ...
- Mac OS X
Mac OS X 除了微软自家的Windows平台, .NET Core针对Mac OS以及各种Linux(RHEL.Ubuntu.Debian.Fedora.CentOS和SUSE等)都提供了很好的 ...
- JS中void(0)的含义
看别人些的JavaScript脚本可以看到这样的代码: <a href="javascript:doTest2();void(0);">here</a> 但 ...