zoukankan      html  css  js  c++  java
  • 双向链表的增删该查

    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();
    
        }
    }
  • 相关阅读:
    索引脚本实例1
    哈尔滨理工大学2016新生赛A题
    拒绝从入门到放弃_《Openstack 设计与实现》必读目录
    生成四位随机数,用于登录验证码制作。
    Python多线程学习(一、线程的使用)
    为什么在 React 16 版本中 render 阶段放弃了使用递归?
    “TensorFlow 开发者出道计划”全攻略,玩转社区看这里!
    【推荐】开源项目ElasticAmbari助力 ElasticSearch、Kibana、ambari服务高效运维管理
    nginx反向代理配置去除前缀
    LNMP架构部署(附:部署Discuz社区论坛Web应用)
  • 原文地址:https://www.cnblogs.com/yangxiaohui227/p/13602018.html
Copyright © 2011-2022 走看看