add()、get()、remove()、toString()等方法
public class LinkedList<E> {
private Node head;
private int size;
public void add(int index,E e) {
if(index <0 || index > size){
throw new IndexOutOfBoundsException("下标越界!");
}
if(index == size){
add(e);
return;
}
Node next = getNode(index);
Node prev = next.prev;
Node node = new Node(e);
next.prev = node;
node.prev = prev;
prev.next = node;
node.next = next;
if(index==0){
head = node;
}
size++;
}
public E get(int index) {
if(index<0 || index>=size){
throw new IndexOutOfBoundsException("下标越界!");
}
Node node = getNode(index);
return node.data;
}
public E remove(int index) {
if(index <0|| index >= size){
throw new IndexOutOfBoundsException("下标越界!");
}
if(size == 1){
E data = head.data;
head = null;
size --;
return data;
}
Node node = getNode(index);
Node prev = node.prev;
Node next = node.next;
prev.next = next;
next.prev = prev;
if(index == 0){
head = next;
}
size -- ;
return node.data;
}
private Node getNode(int index) {
Node node = head;
if(index<size/2){
System.out.println("从前遍历");
for(int i=0;i<index;i++){
node = node.next;
}
}else {
System.out.println("从后遍历");
for (int i = size; i > index ; i--) {
node = node.prev;
}
}
return node;
}
public int size() {
return size;
}
@Override
public String toString() {
if(head == null){
return "[]";
}
StringBuffer buf = new StringBuffer("["+head.data);
Node node = head.next;
while (node!= head) {
buf.append(","+node.data);
node = node.next;
}
return buf.append("]").toString();
}
public boolean add(E e) {
if(head == null){
head = new Node(e);
head.next = head;
head.prev = head;
size++;
return true;
}
Node node = new Node(e);
Node end = head.prev;
end.next = node;
node.next = head;
head.prev = node;
node.prev = end;
size++;
return true;
}
private class Node{
E data;
Node next;
Node prev;
public Node(E e) {
data = e;
}
}
}