手写双向链表,记不住。。。
public class MyList {
private Node first;
private Node last;
private int size;
public void add(Object value) {
Node n = new Node();
n.value = value;
if(size == 0) {
n.prev = n;
n.next = n;
first = n;
last = n;
}else {
n.prev = last;
last.next = n;
n.next = first;
first.prev = n;
last = n;
}
size++;
}
public Object get(int i) {
if(i < 0 || i >= size) {
throw new IndexOutOfBoundsException("" + i);
}
Node n = getNode(i);
return n.value;
}
private Node getNode(int i) {
if(i == 0) {
return first;
}else if(i == size - 1) {
return last;
}
if(i < size / 2) {
Node n = first;
for (int j = 1; j <= i; j++) {
n = n.next;
}
return n;
}else {
Node n = last;
for (int j = size - 2; j >= i; j--) {
n = n.prev;
}
return n;
}
}
public int size() {
return size;
}
private class Node{
Node prev;
Node next;
Object value;
}
}
public class Test1 {
public static void main(String[] args) {
MyList list = new MyList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.add("eee");
list.add("fff");
System.out.println(list.size());
System.out.println(list.get(0));
System.out.println(list.get(list.size() - 1));
System.out.println(list.get(3));
for(int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}