1、定义Node节点
public class Node {
Object obj;
Node previous;
Node next;
public Node() {
}
public Node(Node previous, Object obj, Node next) {
this.obj = obj;
this.previous = previous;
this.next = next;
}
}
2、实现add、remove、get等方法。
public class test01 {
private Node first;
private Node last;
private int size;
public void add(Object obj) {
Node node = new Node();
if (first == null) {
node.previous = null;
node.obj = obj;
node.next = null;
first = node;
last = node;
} else {
node.previous = last;
node.obj = obj;
node.next = null;
last.next = node;
last = node;
}
size++;
}
public void add(int index, Object obj) {
checkIndex(index);
Node targetNode = node(index);
if (targetNode != null) {
Node upNode = targetNode.previous;
Node newNode = new Node(upNode, obj, targetNode);
upNode.next = newNode;
targetNode.previous = newNode;
}
size++;
}
public Object get(int index) {
checkIndex(index);
Node resultNode = node(index);
return resultNode.obj;
}
public void remove(int index) {
checkIndex(index);
Node targetNode = node(index);
if (targetNode != null) {
Node previousNode = targetNode.previous;
Node nextNode = targetNode.next;
previousNode.next = nextNode;
nextNode.previous = previousNode;
}
size--;
}
public int size() {
return this.size;
}
public void printList() {
for (int i = 0; i < size; i++) {
Node thisNode = node(i);
System.out.print(thisNode.obj);
}
}
private Node node(int index) {
Node resultNode = null;
if (first != null) {
resultNode = first;
for (int i = 0; i < index; i++) {
resultNode = resultNode.next;
}
}
return resultNode;
}
private void checkIndex(int index) {
if (index < size && index >= 0) {
return;
} else {
throw new IndexOutOfBoundsException("size:" + size + " , index:" + index);
}
}
public static void main(String args[]) {
test01 list = new test01();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.add(6);
list.printList();
System.out.println("\n");
list.add(2, 9);
list.printList();
System.out.println("\n");
list.remove(1);
list.printList();
System.out.println("\n");
System.out.println(list.get(2));
}
}