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的 ...
随机推荐
- Jodd发送邮件
public static void main(String[] args) { Email email = Email.create().from("xxx") .to(&quo ...
- python学习笔记10 ----网络编程
网络编程 网络编程需要知道的概念 网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂.网络体系结构解决互质性问题彩是分层方法. ...
- UIPI VS与Win7 共舞:用户界面特权隔离
http://tech.it168.com/a2009/0924/737/000000737968.shtml [IT168 专稿]在上文中,我们介绍了操作系统服务的Session 0隔离,通过Ses ...
- uva11584 Partitioning by Palindromes
题目大意: 给出一个字符串,把他划分成尽量少的回文串,问最少的回文串个数 /* 先预处理所有回文子串 dp[i]表示字符1~i划分成的最小回文串的个数 */ #include<iostream& ...
- codevs3145 汉诺塔游戏
3145 汉诺塔游戏 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 白银 Silver 题目描述 Description 汉诺塔问题(又称为河内塔问题),是一个大家熟知 ...
- 原生JS和jQuery中基本的节点操作
js中节点操作**document.createElement()**用来生成网页元素节点,参数为元素的标签名: **document.createTextNode()**用来生成文本节点,参数为所要 ...
- SVN Trunk Tag Branch
http://blog.csdn.net/vbirdbest/article/details/51122637
- The database could not be exclusively locked to perform the operation(SQL Server 5030错误解决办法)(转)
Microsoft SQL Server 5030错误解决办法 今天在使用SQL Server时,由于之前创建数据库忘记了设置Collocation,数据库中插入中文字符都是乱码,于是到DataBas ...
- 服务器安装docker后免除sudo命令
1. 先建立一个docker组:sudo groupadd docker 2. 将用户加入docker组:sudo usermod -aG docker (用户名) 3. 先退出登录:exit 4. ...
- 去掉word文档两边的空白
1.设置-页面布局-页边距,把左边距和右边距的数据设置到最小就好,一般为0.43CM 2.把WORD页面顶部标尺,左右拉到最底,如图: 3.在打印预览里,设置页边距,操作方法同 上述 1,如图: