首先说明一下,这篇文章我是从余胜军老师那里学习来的,算是一个简易版的LinkedList。这篇文章适合小白看一下,具体的要想理解就去老师的网站上看看他讲的就好了。废话不多说了,上代码:
package com.liuz.list;
/**
* 纯手写linkedlist
* @author Administrator
*
*/
public class EasyLinkedList<E> {
private int size=0;
private Node first;
private Node last;
public void add(E e){
Node node=new Node();
node.object=e;
if(first==null){
first=node;
}else{
node.prev=last;
last.next=node;
}
last=node;
size++;
}
private class Node{
/**
* 节点内容
*/
private Object object;
/**
* 上一个节点
*/
private Node prev;
/**
* 下一个节点
*/
private Node next;
}
public Object get(int index){
checkElementIndex(index);
return getNode(index).object;
}
public Node getNode(int index){
checkElementIndex(index);
Node node=null;
if(first !=null){
node=first;
for(int i=0;i<index;i++){
node = node.next;
}
}
return node;
}
private void checkElementIndex(int index){
if(!isElementIndex(index)){
throw new IndexOutOfBoundsException("下标越界!");
}
}
public boolean isElementIndex(int index){
return index >= 0 && index < size;
}
public void remove(int index){
checkElementIndex(index);
EasyLinkedList<E>.Node oldNode=getNode(index);
if(oldNode!=null){
//获取删除元素的上下节点
EasyLinkedList<E>.Node oldNextNode=oldNode.next;
EasyLinkedList<E>.Node oldPrevNode=oldNode.prev;
if(oldPrevNode==null){
first=oldNextNode;
}else{
oldNextNode.prev=oldPrevNode;
}
if(oldNextNode==null){
last=oldPrevNode;
}else{
oldPrevNode.next=oldNextNode;
}
oldNode.object=null;
size--;
}
}
public int getSize(){
return size;
}
}
测试类:
import com.liuz.list.EasyLinkedList;
public class TestEasyLinkedList {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
EasyLinkedList<String> list = new EasyLinkedList<String>();
list.add("张三");
list.add("李四");
list.add("王五");
list.add("赵六");
System.out.println("------------删除之前-------------");
for(int i=0;i<list.getSize();i++){
System.out.println(list.get(i));
}
list.remove(2);
/*System.out.println(list.first.object);
System.out.println(list.first.next.object);
System.out.println(list.first.next.next.object);*/
System.out.println("------------删除之后-------------");
for(int i=0;i<list.getSize();i++){
System.out.println(list.get(i));
}
}
}
就当留着以后自己要是忘记了,就到这里来看看。