跟单向一个路子,没啥可说的,直接上代码:
public class DoubleLink {
public Node first;
public Node last;
class Node {
int data;
Node lnext;
Node rnext;
public Node(int data) {
this.data = data;
this.lnext = null;
this.rnext = null;
}
}
public boolean isEmpty() {
return first==null;
}
public void print() {
Node current = first;
while (current != null) {
System.out.println(current.data);
current = current.rnext;
}
}
public void insert(Node newNode) {
Node node;
Node tmp = null;
if(isEmpty()) {
first = newNode;
first.rnext = last;
last = newNode;
last.lnext = first;
} else {
//插入表头
if(newNode.lnext == null) {
first.lnext = newNode;
newNode.rnext = first;
first = newNode;
} else {
//插入表尾
if(newNode.rnext == null) {
last.rnext = newNode;
newNode.lnext = last;
last = newNode;
} else {
node = first;
while (newNode.rnext != node.rnext) {
tmp = node;
node = node.rnext;
}
tmp.rnext = newNode;
newNode.rnext = node;
node.lnext = newNode;
newNode.lnext = tmp;
}
}
}
}
public void delete(Node delNode) {
Node node;
Node tmp;
if(isEmpty()) {
return;
}
if(delNode == null) {
return;
}
if(first.data == delNode.data) {
first = first.rnext;
first.lnext = null;
}
else {
tmp = first;
node = first;
while (node.data != delNode.data) {
tmp = node;
node = node.rnext;
}
tmp.rnext = delNode.rnext;
tmp.lnext = delNode.lnext;
}
}
public static void main(String[] args) {
DoubleLink dl = new DoubleLink();
Node node1 = dl.new Node(80);
Node node2 = dl.new Node(90);
dl.insert(node1);
dl.insert(node2);
dl.print();
System.out.println("删除之后——");
dl.delete(node2);
dl.print();
}
}