/** * Created with IntelliJ IDEA. * User: guohairui * Date: 17-2-26 * Time: 下午3:21 * To change this template use File | Settings | File Templates. */ public class MyLinkedList { private Node head=new Node(null,null,null); public int size = 0; public MyLinkedList(){ head.next=head.previous=head; } public void add(Object o){ if(null==head){ head = new Node(null,null,null); } Node newNode = new Node(o,head,head.previous); //放在最后 newNode.previous.next=newNode; newNode.next.previous=newNode; size++; } public void add(int index,Object o ) { Node newNode = new Node(o,getNode(index),getNode(index).previous); //放在最后 newNode.previous.next=newNode; newNode.next.previous=newNode; size++; } public Object get(int index){ return getNode(index).data; } public Object remove(int index){ remove(getNode(index)); return null; } public void addFirst(Object o){ } public void removeFirst(){ remove(head.next); } public void removeLast(){ remove(head.previous); } public void remove(Node node){ node.previous.next=node.next; node.next.previous=node.previous; size--; } public int size(){ return size(); } public Object[] toArray(){ return null; } public Node getNode(int index){ if(index<0||index>=size) throw new RuntimeException("超出范围了"); Node node = head; if(index<(size>>1)){//当偏向于前一半时从头找,否则从尾找 for ( int i=0;i<=index;i++) { node = node.next; } }else { for (int i=size;i>index;i--){ node=node.previous; } } return node; } private static class Node{ Object data;//当前Entry Node next;//下一个 Node previous;//前一个 public Node(Object data,Node next,Node previous){ this.data=data; this.next=next; this.previous=previous; } } public String toString(){ StringBuilder sb = new StringBuilder(); sb.append('['); Node n =getNode(0) ; for (int i=0;i<size;i++) { sb.append(n.data); if(i<size-1) sb.append(","); n=n.next; } return sb.append(']').toString(); } }