双向链表的增删该查

public class DubbleLinkList {

    private Node head=null;

    public void addNode(Node node){
        if(node==null){
            return;
        }
        if(null==head){
            head=node;
            return;
        }
        if(head.getNext()==null){
            head.setNext(node);
            node.setPrev(head);
            return;
        }
        Node temp=head.getNext();
        while (true){
            if(temp.getNext()==null){
                break;
            }
            temp=temp.getNext();
        }
        temp.setNext(node);
        node.setPrev(temp);
    }

    public boolean isEmpty(){
        return head==null;
    }

    public void printList(){
        if(this.isEmpty()){
            return;
        }
        Node temp=head;
        while (true){
            if(temp==null){
                break;
            }
            System.out.println(temp);
            temp=temp.getNext();
        }
    }
    public void printReverserList(){
        if(this.isEmpty()){
            return;
        }
        if(head.getNext()==null){
            System.out.println(head);
            return;
        }
        Node last=head;
        while (true){
            if(last.getNext()==null){
                break;
            }
            last=last.getNext();
        }
        Node prev=last;
        while (true){
            if(prev==null){
                break;
            }
            System.out.println(prev);
            prev=prev.getPrev();

        }

    }

    public void updateNode(Node oldNode,Node newNode){
        Node temp=head;
        if(isEmpty()){
            return;
        }
        while (true){
            if(temp==oldNode){
                break;
            }
            if(temp==null){
                break;
            }
            temp=temp.getNext();
        }
        if(temp==null){
            return;//没找到
        }
        if(head==oldNode){
            newNode.setNext(head.getNext());
            head.getNext().setPrev(newNode);
            head=newNode;
            return;
        }
        newNode.setNext(temp.getNext());
        temp.getNext().setPrev(newNode);
        temp.getPrev().setNext(newNode);
        newNode.setPrev(temp.getPrev());


    }

    public void delNode(Node node){
        if(isEmpty()){
            return;
        }
        Node temp=head;
        while (true){
            if(temp==node){
                break;
            }
            if(temp==null){
                break;
            }
            temp=temp.getNext();
        }
        if(temp==null){
            return;
        }
        if(temp.getNext()==null){ //最后一个了
            if(temp.getPrev()==null){
                //只有一个head节点
                head=null;
                return;
            }
            //最后一个
            Node prev = temp.getPrev();
            prev.setNext(null);
            node.setPrev(null);
            return;
        }
        Node next = temp.getNext();
        Node prev = temp.getPrev();
        prev.setNext(next);
        next.setPrev(prev);
        temp.setPrev(null);
        temp.setNext(null);


    }

    public static void main(String[] args) {
        Node yang = new Node(1, "yang");
        Node xiao = new Node(1, "xiao");
        Node hui = new Node(1, "hui");
        Node yun = new Node(2, "yun");
        DubbleLinkList linkList = new DubbleLinkList();
        linkList.addNode(yang);
        linkList.addNode(xiao);
        linkList.addNode(hui);
        linkList.printList();
        System.out.println("逆向da打印");
        linkList.updateNode(xiao,yun);
        linkList.printReverserList();
        System.out.println("删除节点开始。。。。。。。。。");
        linkList.delNode(hui);
        linkList.delNode(yun);
        linkList.delNode(yang);
        linkList.printList();

    }
}
原文地址:https://www.cnblogs.com/yangxiaohui227/p/13602018.html