java提高篇之LinkedList的实现
来源:互联网 发布:算法工程师自学 编辑:程序博客网 时间:2024/05/21 06:20
本篇的目的主要是自己去实现双向链表以能够更好的理解LinkedList。
首先定义一个Node类
package com.wonglar.linkedlist;public class Node { //前一个结点 private Node previous; //结点中的对象 private Object obj; //后一个结点 private Node next; public Node() { } public Node(Node previous, Object obj, Node next) { this.previous = previous; this.obj = obj; this.next = next; } public Node getPrevious() { return previous; } public void setPrevious(Node previous) { this.previous = previous; } public Object getObj() { return obj; } public void setObj(Object obj) { this.obj = obj; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; }}
具体实现
package com.wonglar.linkedlist;public class ImplLinkedList { // 第一个结点 private Node first; // 最后一个结点 private Node last; // 链表中元素个数 private int size; /** * 向链表中添加元素 * * @param obj * :待添加的元素 */ public void add(Object obj) { Node n = new Node(); if (first == null) { n.setPrevious(null); n.setObj(obj); n.setNext(null); // 当链表中一个元素都没有的时候 // 添加一个元素,这个元素即是第一个元素,又是最后一个元素 first = n; last = n; } else { // 当链表中有元素了,即往last后面添加 n.setPrevious(last); n.setObj(obj); n.setNext(null); // 此时last已不是最后一个元素 last.setNext(n); // 将新添加的元素置为last last = n; } size++; } /** * 通过索引得到元素 * * @param index * :待得到元素的索引 * @return */ public Object get(int index) { rangeCheck(index); Node temp = first; for (int i = 0; i < index; i++) { temp = temp.getNext(); } return temp.getObj(); } /** * 根据索引,修改元素的值 * * @param index * :待修改元素索引 * @param element * :修改后的元素的值 */ public void set(int index, Object element) { rangeCheck(index); Node temp = first; for (int i = 0; i < index; i++) { temp = temp.getNext(); } temp.setObj(element); } /** * 根据索引删除链表中的元素 * * @param index * :待删除元素的索引 * @return :删除掉的元素值 */ public Object remove(int index) { rangeCheck(index); Node temp = this.first; Node last = this.last; // 如果删除第一个元素,需要将第一个元素的指向后一个结点的值设为null // 将它的下一个元素的指向头一个结点的值设为null,然后将第二个元素赋于first if (index == 0) { Node down = temp.getNext(); down.setPrevious(null); first.setNext(null); first = down; } else if (index == size - 1) { temp = last; Node up = last.getPrevious(); last.setPrevious(null); up.setNext(null); this.last = up; } else { for (int i = 0; i < index; i++) { temp = temp.getNext(); } Node up = temp.getPrevious(); Node down = temp.getNext(); up.setNext(down); down.setPrevious(up); } size--; return temp.getObj(); } /** * 根据元素值删除链表中的元素 * @param o :待删除的元素 * @return :是否删除成功 */ public boolean remove(Object o){ Node temp = this.first; if(o==null){ for (int index = 0; index < this.size; index++) { if(temp.getObj()==null){ //执行删除操作 remove(index); return true; } temp = temp.getNext(); } }else{ for (int index = 0; index < this.size; index++) { if(temp.getObj().equals(o)){ remove(index); return true; } temp = temp.getNext(); } } return false; } /** * 检查索引是否越界 * * @param index */ private void rangeCheck(int index) { if (index < 0 || index >= size) { throw new IndexOutOfBoundsException("索引越界异常:index:" + index + ",size:" + size); } } /** * 返回链表中元素个数 * * @return */ public int size() { return size; }}
0 0
- java提高篇之LinkedList的实现
- java提高篇---LinkedList
- java提高篇之ArrayList的实现
- java LinkedList 的实现
- java提高篇(二二)-----LinkedList
- java提高篇(二二)-----LinkedList
- java提高篇(二二)-----LinkedList
- java提高篇(二二)-----LinkedList
- java提高篇(二二)---LinkedList
- java提高篇(二二)-----LinkedList
- java提高篇(五)LinkedList
- java提高篇(二二)-----LinkedList
- Java之实现自己的ArrayList与LinkedList
- 数据结构(LinkedList的java实现)
- 数据结构--LinkedList的java实现
- Java LinkedList的实现原理
- java中LinkedList的实现
- java自己实现的linkedlist
- angularjs 自定义filter的简单用法
- Intellij IDEA使用Maven构建spark开发环境
- 量化进阶——如何进行期权套利(二)
- js物体链式运动
- 使用ckeditor富文本编辑器页面解析文字样式方法
- java提高篇之LinkedList的实现
- html5阻止video的默认全屏播放
- ubuntu上修改root密码
- JAVA WEB之Spring4.x JdbcTemplate
- 实现KNN(K近邻平滑滤波器)
- go语言之数组和切片的一些用法比较
- openssl speed md5 测试md5的performance
- C++ const
- 5/12 cnn 手写字体识别代码学习笔记