/**
* 节点类
* @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的更多相关文章

  1. 3.5 MyLinkedList 实现

    3.5 MyLinkedList 类的实现 MyLinkedList 将用双链表实现,并且还需要保留该表两端的引用.这将需要三个类 MyLinkedList 类,包含到两端的链.表的大小以及一些方法. ...

  2. 深入理解java中的ArrayList和LinkedList

    杂谈最基本数据结构--"线性表": 表结构是一种最基本的数据结构,最常见的实现是数组,几乎在每个程序每一种开发语言中都提供了数组这个顺序存储的线性表结构实现. 什么是线性表? 由0 ...

  3. Java实现单链表的各种操作

    Java实现单链表的各种操作 主要内容:1.单链表的基本操作 2.删除重复数据 3.找到倒数第k个元素   4.实现链表的反转   5.从尾到头输出链表 6.找到中间节点 7.检测链表是否有环 8.在 ...

  4. 数据结构(Java描述)之线性表

    基础概念 数据结构:是相互之间存在一种或多种关系的数据元素的集合. 逻辑结构和物理结构 关于数据结构,我们可以从逻辑结构和物理结构这两个维度去描述 逻辑结构是数据对象中数据元素之间的关系,是从逻辑意义 ...

  5. 自定义Java集合

    一.泛型 1.在JDK1.4以前,所有的集合元素全都按照Object来存储,拿出来还要进行强制转型.由于这样的做法有太多的缺点,容易出现ClassCaseException,不安全,让人不省心,于是乎 ...

  6. Java Iterator, ListIterator 和 foreach语句使用

    Java Iterator, ListIterator 和 foreach语句使用 foreach语句结构: for(part1:part2){part3};  part2 中是一个数组对象,或者是带 ...

  7. java基础语法要点<二>(基于1.8)

    注解(元数据) 从jdk5 开始,java支持在源文件中嵌入补充信息,称为注释(annotation).注释不会改变程序的动作,也就不会改变程序的语义.但在开发和部署期间,各种工具可以使用这类信息.元 ...

  8. 约瑟夫环的java解决

    总共3中解决方法,1.数学推导,2.使用ArrayList递归解决,3.使用首位相连的LinkedList解决 import java.util.ArrayList; /** * 约瑟夫环问题 * 需 ...

  9. [AaronYang]C#人爱学不学[4]

    本文章不适合入门,只适合有一定基础的人看.我更相信知识细节见高低,我是从4.0开始学的,终于有时间系统的学习C#5.0,是5.0中的知识,会特殊标记下.但写的内容也可能含有其他版本framework的 ...

随机推荐

  1. ASP.NET in C#,ClientScript.RegisterStartupScript与ClientScript.RegisterClientScriptBlock用法之己见

    ClientScript.RegisterStartupScript:http://msdn.microsoft.com/zh-cn/library/system.web.ui.clientscrip ...

  2. 一次偶然的点开一盏灯引发的SEO初识

    事情是这样,不小心点开了dev tools的审计(audits)面板,点开了灯之后,画风如下 emmm, SEO 跑了满分也,好奇宝宝就往下滚到SEO区域,发现了如下新大陆 嗯,原来是应用满足了打钩的 ...

  3. python split 与join

    1.string.join (saq):以string 为分隔符,将seq中所有的元素(字符串表示"")合并成一个新的字符串 2.string.split(str="&q ...

  4. JavaScript 检验变量

    创建: 2019/02/20 迁入: 删除[WIP]标签(因为随时更新, 不存在完成不完成)   从[JavaScript 式与运算符]迁入typeof 更新: 2019/03/25 补充静态变量与参 ...

  5. 模板 - 动态规划 - 区间dp

    因为昨天在Codeforces上设计的区间dp错了(错过了上紫的机会),觉得很难受.看看学长好像也有学,就不用看别的神犇的了. 区间dp处理环的时候可以把序列延长一倍. 下面是 $O(n^3)$ 的朴 ...

  6. 51nod1113(矩阵快速幂模板)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1113 题意:中文题诶- 思路:矩阵快速幂模板 代码: #inc ...

  7. poj1837 Balance

    Balance  POJ - 1837 题目大意: 有一个天平,天平左右两边各有若干个钩子,总共有C个钩子,有G个钩码,求将钩码全部挂到钩子上使天平平衡的方法的总数. 其中可以把天枰看做一个以x轴0点 ...

  8. js的Element.scrollIntoView的学习

    1.Element.scrollIntoView()    该方法让当前元素滚动到浏览器窗口的可是区域内: 2.语法: element.scrollIntoView();//等同于element.sc ...

  9. selenium IDE界面介绍(转)

    1.文件:创建.打开和保存测试案例和测试案例集.编辑:复制.粘贴.删除.撤销和选择测试案例中的所有命令.Options : 用于设置seleniunm IDE. 2.用来填写被测网站的地址. 3.速度 ...

  10. TensorFlow高层封装:从入门到喷这本书

    目录 TensorFlow高层封装:从入门到喷这本书 0. 写在前面 1. TensorFlow高层封装总览 2. Keras介绍 2.1 Keras基本用法 2.2 Keras高级用法 3. Est ...