原理图:

运行结果:

Node代码:
public class Node {
    int data;
    Node next;
    Node previous;      //前向指针
    
    public Node(int value) {
		// TODO Auto-generated constructor stub
    	this.data = value;
	}
    
    public void display()
    {
    	System.out.print(data+ " ");
    }
}
doubleLinklist:
public class doubleLinklist {
	private Node first;
    private Node last;     //尾结点
    
    public doubleLinklist() {
		// TODO Auto-generated constructor stub
    	first =null;
    	last = null;
	}
    
    public void insertFirst(int value)     //头部插入入
    {
    	Node node = new Node(value);
    	if(IsEmpty())
    	{
    		first = node;
    		last =node ;
    	}
    	else
    	{
    	    node.next = first;
    	    first.previous = node;
    	    first = node;
    	    
    	}
    	
    }
    
    public void insertLast(int value)   //从尾部插入结点
    {
    	Node node = new Node(value);
    	if(IsEmpty())
    	{
    		first = node;
    		last =node;
    	}
    	else
    	{
    		last.next =node;
    		node.previous = last;
    		last = node;
    	}
    }
    
    public void deleteFirst()   //删除头结点
    {
    	
    	if(first.next ==null)
    	{
    		first =null;
    		last=null;
    	}
    	else
    	{
    		Node tmp = first.next;
    		tmp.previous =null;
        	first= tmp;
        	if(first == null)
        		last =null;
    	}
    	
    }
    
    public void deleteLast()     //从尾部删除
    {
    	if(last.previous == null)
    	{
    		last =null;
    		first=null;
    	}
    	else
    	{
    		last.previous.next =null;
        	last = last.previous;
    	}
    	
    }
    
    
    public void find(int value)     //查找数据
    {
    	Node current = first;
    	while(current.data != value)
    	{
    		current =current.next;
    	}
    	current.display();
    }
    
    public void findDelete(int value)     //查找数据并且删除
    {
    	Node current = first;
    	
    	if(first.data ==value)
    	{
    		first =first.next;
    	}
    	else
    	{
    		while(current.data != value)
        	{
        		current =current.next;
        	}
        		current.previous.next = current.next;
    	}
    	
    	
    	
    	
    }
    
    public boolean IsEmpty()     //判断链表是否为空
    {
    	return (first == null);
    }
    
    
    public void display()    //显示全部结点
    {
    	Node current = first;
    	while(current != null)
    	{
    		current.display();
    		current =current.next;
    	}
    }
    
    
}
 
        