public class DoubleList<T> {
public DNode<T> head;
private int Count;
class DNode<T>{
private DNode pre;
private DNode next;
private T value;
public DNode(T value, DNode pre, DNode next) {
this.next = next;
this.pre = pre;
this.value = value;
}
}
public DoubleList() {
head = new DNode<T>(null, null, null);
head.next = head.pre = head;
Count = 0;
}
public int size() {
return Count;
}
public boolean isEmpty() {
return Count == 0;
}
public DNode<T> getNode (int index){
if(index <= 0 || index > Count)
throw new IndexOutOfBoundsException();
if(index <= Count/2) {
DNode<T> node = head.next;
for(int i = 1; i < index; i++) {
node = node.next;
}
return node;
}
DNode<T> node = head.pre;
int rindex = Count - index;
for(int j = 0; j < rindex; j++) {
node = node.pre;
}
return node;
}
public T get(int index) {
return getNode(index).value;
}
public T getFirst() {
return getNode(1).value;
}
public T getLast() {
return getNode(Count).value;
}
public void insert(int index, T t) {
if(index == 1) {
DNode<T> tnode = new DNode<T>(t, head, head.next);
head.next.pre = tnode;
head.next = tnode;
Count++;
return;
}
DNode<T> inode = getNode(index);
DNode<T> tnode = new DNode<T>(t, inode.pre, inode);
inode.pre.next = tnode;
inode.pre = tnode;
Count++;
return ;
}
public void appendLast(T t) {
DNode<T> node = new DNode<T>(t, head.pre,head);
head.pre.next = node;
head.pre = node;
Count++;
}
public void print() {
for(int i = 1; i <= Count; i++) {
System.out.println(getNode(i).value);
}
}
public void delete(int index) {
DNode<T> node = getNode(index);
node.next.pre = node.pre;
node.pre.next = node.next;
node = null;
Count--;
}
public static void main(String[] args) {
DoubleList<String> dl = new DoubleList<String>();
try {
System.out.println("依次插入节点1、2、3、4:");
dl.appendLast("1");
dl.appendLast("2");
dl.appendLast("3");
dl.appendLast("4");
dl.print();
System.out.println("节点个数为:"+dl.Count);
System.out.println("\n"+"在双链表第4个节点处插入一个节点7:");
dl.insert(4, "7");
dl.print();
System.out.println("节点个数为:"+dl.Count);
System.out.println("\n"+"删除第3个节点");
dl.delete(3);
dl.print();
System.out.println("节点个数为:"+dl.Count);
System.out.println("\n"+"打印双链表:");
dl.print();
System.out.println("节点个数为:"+dl.Count);
System.out.println("双链表是否为空:"+dl.isEmpty());
}catch(IndexOutOfBoundsException e) {
e.getStackTrace();
}
}
}
转载请注明出处:http://www.cnblogs.com/skywang12345/p/3561803.html