单向链表--java实现
2015-12-22 17:10
609 查看
我们都知道,java中自带了许多的数据结构。这些数据结构被封装的很好,使得我们用的很方便,但是我们却不知道这些数据结构具体是怎么实现的。
于是,自己尝试着实现了一个链表。
单向链表示意图:
![](http://img.blog.csdn.net/20151223141421162)
单向链表实现代码:
于是,自己尝试着实现了一个链表。
单向链表示意图:
单向链表实现代码:
[code]public class LinkedList<E> { private class Node<E>{ public E value; public Node<E> next; public Node(E value,Node<E> next) { this.value = value; this.next = next; } } private int size; public Node<E> head; /** * constructor */ public LinkedList() { head = new Node<E>(null, null); head.next = head; size = 0; } /** * 获取链表长度 * @return */ public int size(){ return size; } /** * 判断链表是否为空 * @return */ public boolean isEmpty(){ return size == 0; } public void validateIndex(int index){ if (index < 0 || index >= size) { throw new IndexOutOfBoundsException(); } return; } /** * 从链表头部添加元素 * @param value */ public void add(E value){ Node<E> cur = new Node<E>(value, head.next); head.next = cur; size++; return; } /** * 添加到链表的尾部 * @param value */ public void addLast(E value){ Node<E> node = getNode(size - 1); Node<E> cur = new Node<E>(value, null); node.next = cur; size++; return; } /** * 获取位置index的节点 * @param index * @return */ public Node<E> getNode(int index){ validateIndex(index); Node<E> cur = head.next; for (int i = 0; i < index; i++) { cur = cur.next; } return cur; } /** * 获取位置为index的节点值 * @param index * @return */ public E get(int index){ return getNode(index).value; } /** * 插入一个节点 * @param index * @param value */ public void insert(int index,E value){ validateIndex(index); if (index == 0) { add(value); return; } Node<E> preNode = getNode(index - 1);//插入位置前一个节点 Node<E> node = getNode(index);//插入位置原始的节点,插入后为插入节点的下一个节点 Node<E> cur = new Node<E>(value, node); //准备插入的节点 preNode.next = cur; size++; return; } /** * 删除一个节点 * @param index */ public void delete(int index){ validateIndex(index); if (index == 0) { head.next = head.next.next; size--; return; } Node<E> node = getNode(index - 1); node.next = node.next.next; size--; return; } /** * 删除第一个节点 */ public void deleteFirst(){ delete(0); return; } }
相关文章推荐
- 记一次使用eclipse调试出现的异常
- Struts2 环境的搭建及项目测试
- 用java实现zip压缩
- java的文件上传
- eclipse的一些设置
- java singleton三总模式(转载学习)写的很好
- Java API —— Collections类
- Java IO系列0 InputStream与OutputStream(字节流)
- java性能优化读书笔记之三《程序优化===集合优化(Map)》
- Java中 键盘录入Scanner,String与 Integer数据类型转换
- Java — 面向对象
- Spirng+SpringMVC+Maven+Mybatis+MySQL项目搭建
- Spirng+SpringMVC+Maven+Mybatis+MySQL项目搭建
- (Singleton)单例模式的Java实现
- Spring MVC 解读
- 【java学习笔记s】多态
- Eclipse下Properties解析(重要的可修改的会用红笔标注)
- 关于java.lang.UnsatisfiedLinkError的处理
- Spring4.2.0 MVC json问题(406 Not Acceptable) 真的很蛋疼,耗时半天
- Setting property 'source' to 'org.eclipse.jst.jee.server:web' did not find a matching property原因?