链表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类主要负责数据的保存以及引用有关系的分配

    

原文地址:https://www.cnblogs.com/anyux/p/11872988.html