不多说,上代码,以后有时间做解释
节点类
package double_link;
/**
* 节点类
* @author Administrator
*
*/
public class Node {
long data;
Node next; // 下一个
Node previous; //前一个
public Node(long value){
this.data = value;
}
/**
* 显示
*/
public void display(){
System.out.print(data+" ");
}
}
package double_link;
public class DoubleLinkList {
private Node first; //头结点
private Node last; //尾节点
/**
* 从头结点插入一个节点
*/
public void insertFirstNode(long value){
Node node = new Node(value);
if(isEmpty()){
last = node;
}else{
first.previous = node;
}
node.next = first;
first = node;
}
/**
* 从尾节点插入一个节点
*/
public void insertLastNode(long value){
Node node = new Node(value);
if(isEmpty()){
first = node;
}else{
last.next = node;
node.previous = last;
}
last = node;
}
/**
* 显示链表
*/
public void display(){
Node current = first;
while(current != null){
current.display();
current = current.next;
}
System.out.println();
}
/**
* 从头部删除一个节点
*/
public void deleteFirst(){
if(first == null) return;
Node tmp = first;
if(first.next == null){
last = null;
}else{
first.next.previous = null;
}
first = tmp.next;
}
/**
* 从尾部删除一个节点
*/
public void deleteLast(){
if(first == null) return;
if(first.next == null){
first = null;
}else{
last.previous.next = null;
}
last = last.previous;
}
/**
* 查找节点
*/
public Node find(long value){
Node current = first;
while(current.data != value){
if(current.next == null){
return null;
}
current = current.next;
}
return current;
}
/**
* 查找节点的上一个节点
*/
public Node findPrevious(Node node){
return node.previous;
}
/**
* 查找节点的下一个节点
*/
public Node findNext(Node node){
return node.next;
}
/**
* 根据值删除节点
*/
public void delete(long value){
Node current = first;
while(current.data != value){
if(current.next == null){
return;
}
current = current.next;
}
if(current == first){
first = current.next;
}else{
current.previous.next = current.next;
}
}
public boolean isEmpty(){
return (first == null);
}
}
测试类
package double_link;
public class TestDoubleLink {
public static void main(String[] args) {
DoubleLinkList dlist = new DoubleLinkList();
dlist.insertFirstNode(2);
dlist.insertFirstNode(3);
dlist.insertFirstNode(4);
dlist.insertFirstNode(5);
dlist.display();
while(!dlist.isEmpty()){
dlist.deleteFirst();
// dlist.deleteLast();
dlist.display();
}
}
}