public class ExtLinkedList<E>{
private int size;//实际长度
private Node first;//第一个节点(为了查询开始)
private Node last;//最后一个节点(为了添加开始)
public void add(E e){
Node node=new Node();//创建一个节点
node.object=e;//为节点赋值
if(first==null){
//添加第一个节点
first=node;
last=node;
}else{
//添加第二个及大于第二个节点
node.prev=last;
last.next=node;//第一个节点的下一个指针指向node节点
}
last=node;//为最后一个节点赋值
size++;
}
public int size(){
return size;
}
private void checkElement(int index){
if(!isElementIndex(index))
throw new IndexOutOfBoundsException("查询出错啦");
}
private boolean isElementIndex(int index){
return index>=0&&index<size;
}
public Object get(int index){
checkElement(index);
ExtLinkedList<E>.Node node=getNode(index);
return node.object;
}
public ExtLinkedList<E>.Node getNode(int index){
checkElement(index);
Node node=null;
if(first!=null){
node=first;//默认查找第一个节点
for(int i=0;i<index;i++){
node=node.next;
}
}
return node;
}
public void remove(int index){
checkElement(index);
ExtLinkedList<E>.Node oldNode=getNode(index);
if(oldNode!=null){
//获取当前节点的上下节点
ExtLinkedList<E>.Node oldNodePrev=oldNode.prev;
ExtLinkedList<E>.Node oldNodeNext=oldNode.next;
if(oldNodePrev==null){
//删除第一个元素
first=oldNodeNext;
}else{
oldNodePrev.next=oldNodeNext;
oldNode.prev=null;
}
if(oldNodeNext==null){
//删除最后一个元素
last=oldNodePrev;
}else{
oldNodeNext.prev=oldNodePrev;
oldNode.next=null;
}
size--;
}
}
public void add(int index,E e){
checkElement(index);
ExtLinkedList<E>.Node oldNode=getNode(index);
if(oldNode!=null){
//获取当前节点的上下节点
ExtLinkedList<E>.Node oldNodePrev=oldNode.prev;//node1
ExtLinkedList<E>.Node oldNodeNext=oldNode.next;//node3
Node newNode=new Node();
newNode.object=e;
//newNode.prev=oldNodePrev;
newNode.next=oldNode;
if(oldNodePrev==null){
first=newNode;
}else{
newNode.prev=oldNodePrev;
oldNodePrev.next=newNode;
}
oldNode.prev=newNode;
size++;
}
}
private class Node{
public E object;
Node prev;//前一个节点
Node next;//后一个节点
}
public static void main(String[] args){
ExtLinkedList extLinkedList=new ExtLinkedList();
extLinkedList.add("1");
extLinkedList.add("2");
extLinkedList.add("3");
extLinkedList.add(2,"f");
/*System.out.println(extLinkedList.first.object);
System.out.println(extLinkedList.first.next.object);
System.out.println(extLinkedList.first.next.next.object);*/
for(int i=0;i<extLinkedList.size;i++){
System.out.print(extLinkedList.get(i));
}
}
}