• 链表02-链表的基本雏形


    通过分析发现

      用户在操作的过程中完全没有必要去关心Node类

      所有的节点的引用关系不应该由用户处理,应该由一个专门的工具类来处理

    下面需要定义一个类,来帮助客户端去隐藏所有链表中给出的细节操作

    // 每一个链表实际上就是由多个节点组成的
    class Node {     // 定义一个节点
        private String data; // 要保存的数据
        private Node next; //要保存的下一个节点 
        // 每一个Node类对象都必须保存有相应的数据
        public Node (String data){ // 必须有数据才有Node
                this.data = data;
        }
        public void setNext(Node next){
                this.next = next;
        }
        public Node getNext(){
                return this.next;
        }
        public String getData(){
                return this.data;
        }
    }
    
    class Link { // 负责数据的设置和输出
            public void add(String data){ // 添加数据
    
            }
    
            public void print(){ // 输出数据
    
            }
    }
    public class LinkDemo{
            public static void main(String args[]){
                Link link = new Link(); // 由这个类负责添加数据
                link.add("hello");
                link.add("world");
                link.add("MLDN");
                link.add("www");
                link.print(); // 展示数据
        }
    }

    // 每一个链表实际上就是由多个节点组成的
    class Node {     // 定义一个节点
        private String data; // 要保存的数据
        private Node next; //要保存的下一个节点 
        // 每一个Node类对象都必须保存有相应的数据
        public Node (String data){ // 必须有数据才有Node
                this.data = data;
        }
        public void setNext(Node next){
                this.next = next;
        }
        public Node getNext(){
                return this.next;
        }
        public String getData(){
                return this.data;
        }
        // 实现节点的添加
        // 第一次调用(Link):this = Link.root
        // 第二次调用(Node):this = Link.root.next
        // 第三次调用(Node):this = Link.root.next.next
        public void AddNode(Node newNode){
            if (this.next == null ){ // 当前节点的下一个节点为空
                    this.next = newNode; // 保存新节点
            }else{ // 当前节点之后还存在节点
                // 当前节点的下一个节点继续保存
                this.next.AddNode(newNode);
            }
    
        }
        
        // 第一次调用(Link) this = Link.root
        // 第二次调用(Node) this = Link.root.next
        // 第三次调用(Node) this = Link.root.next.next
        public void printNode(){ // 输出数据
            System.out.println(this.data); // 输出当前节点数据
            if (this.next != null){ // 现在还有下一个节点
                    this.next.printNode(); // 输出下一个节点
            }
    
        }
    }
    // 是需要进行Node类对象的关系处理
    class Link { // 负责数据的设置和输出
            private Node root; // 根节点
            public void add(String data){ // 添加数据
                // 为了可以设置数据的先后关系,所以将data包装在Node内部
                Node newNode = new Node(data);
                // 保存当前数据地时候,现在没有根节点
                if (this.root == null ){ // 一个链表只有一个根节点
                    this.root = newNode; // 为新的节点设置为根节点
                }else{ // 根节点已经存在了
                    // 随后增加的元素,应该交给节点来决定
                    // 从root节点之后找到合适的位置
                    this.root.AddNode(newNode);
                }
    
            }
    
            public void print(){ // 输出数据
                //if(this.root != null){ // 现在存在根节点
    
                //}
                root.printNode();
    
            }
    }
    public class LinkDemo{
            public static void main(String args[]){
                Link link = new Link(); // 由这个类负责添加数据
                link.add("hello");
                link.add("world");
                link.add("MLDN");
                link.add("www");
                link.print(); // 展示数据
        }
    }

     结果如下

     链表的基本形式

      通过以上的代码实际上就可以发现链表的基本操作特点:

        客户端代码不用去关注具体的Node以及引用关系的细节,只关注于Link类中支持的方法

        Link类的主要功能是控制Node类对象的产生和根节点

        Node类主要负责数据的保存以及引用有关系的分配

        

  • 相关阅读:
    Apache Common DbUtils
    Jackson 框架,轻易转换JSON
    Java数据库ResultSet转json实现
    java获得当前文件路径
    JSP基本面试的试题
    mysql优化方法积累
    linux数据盘分区以及格式化
    linux 数据盘和系统盘的查看
    配置Tomcat使用https协议(配置SSL协议)
    idea-java项目配置
  • 原文地址:https://www.cnblogs.com/anyux/p/11872988.html
Copyright © 2020-2023  润新知