/** * Created by wangtiegang on 2017/2/25. */ public class MyLinkedList<E> implements List { //当前size private int size; //第一个节点 private Node firstNode; //最后一个节点 private Node lastNode; //构造存放数据及指针的Node private static class Node<E>{ E data; Node<E> preNode; Node<E> nextNode; public Node(E data,Node preNode,Node nextNode){ this.data = data; this.preNode = preNode; this.nextNode = nextNode; } } @Override public void add(Object o) { //将最后一个node放到preNode Node node = new Node(o,lastNode,null); //将最后一个node的nextNode设置成o if(lastNode != null){ lastNode.nextNode = node; } lastNode = node; if(firstNode == null){ firstNode = node; } //size增加 size++; } @Override public void add(int index, Object o) { if(index < 0 || index > size){ throw new IndexOutOfBoundsException(); } if(index == size){ this.add(o); }else { //找到index个 Node node = firstNode; for(int i = 0;i<index;i++){ node = node.nextNode; } //将原index个的pre给o的pre Node newNode = new Node(o,node.preNode,node); if(index != 0){ node.preNode.nextNode = newNode; } //将o的给index的pre node.preNode = newNode; if(index == 0){ firstNode = newNode; } size++; } } @Override public Object get(int index) { if(index < 0 || index >= size){ throw new IndexOutOfBoundsException(); } Node node = firstNode; for(int i = 0;i<index;i++){ node = node.nextNode; } return node.data; } @Override public Object remove(int index) { if(index < 0 || index >= size){ throw new IndexOutOfBoundsException(); } //找到index个 Node node = firstNode; for(int i = 0;i<index;i++){ node = node.nextNode; } //如果移除0,则需要替换firstNode if(index != 0){ node.preNode.nextNode = node.nextNode; }else { firstNode = node.nextNode; } //如果移除最后一位,则需要替换lastNode if(index < (size-1)){ node.nextNode.preNode = node.preNode; }else{ lastNode = node.preNode; } size--; return null; } @Override public int size() { return size; } }