public class DoubleLinkedList {
public Node head;
public DoubleLinkedList() {
head = new Node();
head.next = null;
head.prior = null;
}
//尾插法
public void createByTail(int[] arr, int n) {
Node tail = head;
for(int i=0; i<n; i++) {
Node c = new Node(arr[i]);
tail.next = c;
c.prior = tail;
tail = c;
}
tail.next = null;
}
//头插法
public void createByHead(int[] arr, int n) {
for(int i=0; i<n; i++) {
Node c = new Node(arr[i]);
c.next = head.next;
c.prior = head;
if(head.next != null)
head.next.prior = c;
head.next = c;
}
}
//插入一个节点
public boolean insert(int i, int e) {
int j=0;
Node p = head;
while(j<i-1 && p!=null) {
j++;
p = p.next;
}
if(p == null) {
return false;
}
Node c = new Node(e);
c.next = p.next;
c.prior = p;
if(p.next != null) {
p.next.prior = c;
}
p.next = c;
return true;
}
//删除一个节点
public int[] delete(int i) {
int[] arr = new int[2];
int j=0;
Node p = head;
while(j<i-1 && p!=null) {
j++;
p = p.next;
}
if(p == null ||p.next == null) {
arr[0] = 0;
return arr;
}
arr[0] = 1;
arr[1] = p.next.data;
p.next = p.next.next;
if(p.next !=null)
p = p.next.prior ;
return arr;
}
public void display() {
Node p = head.next;
while(p != null) {
if(p.next != null)
System.out.print(p.data + "->");
else
System.out.println(p.data);
p = p.next;
}
}
public static void main(String[] args) {
int[] arr = new int[]{5,6,1,6,9,3,7,8,10,11,4};
DoubleLinkedList list = new DoubleLinkedList();
list.createByHead(arr, arr.length);
list.display();
list.createByTail(arr, arr.length);
list.display();
if(!list.insert(13, 99)) {
System.out.println("error");
} else {
list.display();
}
if(!list.insert(10, 99)) {
System.out.println("error");
} else {
list.display();
}
int[] tmp = list.delete(12);
if(tmp[0] == 0) {
System.out.println("error");
} else {
System.out.println("delete " + tmp[1]);
list.display();
}
tmp = list.delete(4);
if(tmp[0] == 0) {
System.out.println("error");
} else {
System.out.println("delete " + tmp[1]);
list.display();
}
}
}
class Node {
public int data;
public Node next;
public Node prior;
public Node(){}
public Node(int data) {
this.data = data;
next = prior = null;
}
}
结果:
4->11->10->8->7->3->9->6->1->6->5
5->6->1->6->9->3->7->8->10->11->4
error
5->6->1->6->9->3->7->8->10->99->11->4
delete 4
5->6->1->6->9->3->7->8->10->99->11
delete 6
5->6->1->9->3->7->8->10->99->11