import java.util.*; public class MyLinkedList implements List { private Node first; private Node last; private int size = 0 ; public void Myadd(Object o){ final Node l = last; final Node newNode = new Node(l,o,null); last = newNode; if(l == null) first = newNode; else l.next = newNode; size++; } public void Myadd(int index , Object o){ checkPosition(index); if(index == size){ Myadd(o); } else{ final Node PreNode =GetNodeByIndex(index).prev; final Node newNode = new Node(PreNode,o,GetNodeByIndex(index)); PreNode.next =newNode; if(PreNode == null) first = newNode; //ΪʲôҪ������ָ�룿 else PreNode.next = newNode; size++; } } public Object get(int index){ checkPosition(index); return GetNodeByIndex(index); } public void remove(int index){ Node node = GetNodeByIndex(index); node.prev.next = node.next; node.next.prev = node.prev; node = null; size--; } public int size(){ return size; } public void addFirst(Object o){ final Node FirstNode= first; final Node newNode = new Node(null,o,first); first = newNode; if(FirstNode == null) last = newNode; else first.prev = newNode; size++; } public void addLast(Object o){ final Node LastNode = last; final Node newNode = new Node(last,o,null); last = newNode; if(last == null) first = newNode; else last.next = newNode; size++; } public void removeFirst(){ final Node f = first; if(f == null) throw new NoSuchElementException(); first = f.next; first = null; size--; } public void removeLast(){ final Node f = last; if(f == null) throw new NoSuchElementException(); last = last.prev; last = null; size--; } public Iterator iterator(){ return null; } private static class Node{ Object item; Node next; Node prev; Node (Node prev,Object element ,Node next){ this.item = element; this.next = next; this.prev = prev; } } private Node GetNodeByIndex(int index){ if(index > size/2) { Node Temp = first; for(int i = 0; i< index;i++) Temp = Temp.next; // return Temp; } else { Node Temp = last; for(int i = size-1; i> index; i--) Temp = Temp.prev; return Temp; } } private void checkPosition(int index){ if(index < 0 || index > size) throw new IndexOutOfBoundsException("index:"+ index+"is llegal"); } }