LinkList手工制作
数据结构
private LinkedListNode first;
private LinkedListNode last;
private int size;
节点代码
public class LinkedListNode {
LinkedListNode previous;
LinkedListNode next;
Object element;
public LinkedListNode(LinkedListNode previous, LinkedListNode next, Object element) {
super();
this.previous = previous;
this.next = next;
this.element = element;
}
public LinkedListNode(Object element) {
super();
this.element = element;
}
}
add方法
public void add(E element) {
LinkedListNode node = new LinkedListNode(element);
if (first == null) {
first = node;
last = node;
} else {
node.previous = last;
node.next = null;
last.next = node;
last = node;
}
size++;
}
public void add(int index,E element) {
checkRange( index);
LinkedListNode newNode =new LinkedListNode(element);
LinkedListNode temp = getNode(index);
if(temp!=null) {
LinkedListNode up =temp.previous;
up.next=newNode;
newNode.previous=up;
newNode.next=temp;
temp.previous=newNode;
}
size++;
}
remove方法
public void remove(int index) {
checkRange( index);
LinkedListNode temp = getNode(index);
if (temp != null) {
LinkedListNode up = temp.previous;
LinkedListNode down = temp.next;
if (up != null)
up.next = down;
if (down != null)
down.previous = up;
if (index == 0) {
first = down;
}
if (index == size - 1) {
last = up;
}
}
size--;
}
get
public LinkedListNode getNode(int index) {
checkRange( index);
LinkedListNode temp=null;
if (index <= (size >> 1)) {
temp = first;
for (int i = 0; i < index; i++) {
temp = temp.next;
}
} else {
temp = last;
for (int i = size - 1; i > index; i--) {
temp = temp.previous;
}
}
return temp;
}