package com.coding.basic; public class MyLinkedList implements List { private Node headNode; private Node endNode; private int size; public void add(Object o){ add(size,o); } public void add(int index , Object o){ addBefore(getNode(index),o); } // 执行添加元素: private void addBefore(Node node,Object o) { Node newNode = new Node(o, node.prev, node.next); newNode.prev.next = newNode; newNode.next.prev = newNode; size ++; } // 获得元素; private Node getNode(int index) { Node rtnNode; if (index > size || index < 0) { throw new IndexOutOfBoundsException(); } if (index < size / 2) { rtnNode = headNode.next; for (int i = 0; i < index; i++) { rtnNode = rtnNode.next; } } else { rtnNode = endNode; for (int i = size; i > index; i--) { rtnNode = rtnNode.prev; } } return rtnNode; } public Object get(int index){ return getNode(index).data; } public Object remove(int index){ return remove(getNode(index)); } private Object remove(Node node) { node.prev.next = node.next; node.next.prev = node.prev; size --; return node.data; } public int size(){ return size; } public void addFirst(Object o){ add(headNode.prev); } public void addLast(Object o){ add(endNode.next); } public Object removeFirst(){ remove(headNode); return headNode.data; } public Object removeLast(){ remove(endNode); return endNode.data; } public Iterator iterator(){ return null; } public boolean isEmpty(){ return size == 0; } private static class Node{ //当前元素,下一个及前一个; Object data; Node next; Node prev; public Node(Object data,Node prev, Node next) { this.data = data; this.next = next; this.prev = prev; } } }