开发可用链表

指的是可以使用链表实现数据的增加、修改、删除、查询操作

程序基本结构

  在开发具体的可用链表操作之前,首先必须明确一个道理:Node类负责所有节点数据的保存以及节点关系的匹配,所以Node类不可能单独去使用。而上一节的实现里面Node类是可以单独使用的,外部可以绕过Link类直接使用Node类,这样明显没有任何意义存在。所以下面必须修改设计结构,让Node类只被Link类使用

  这个时候使用内部类明显是一个合适的选择。内部类可以使用private定义,这样内部类只能被一个外部类所使用,另外一点,内部类可以方便的与外部类之间进行私有属性的直接访问

  链表的开发结构

class Link{ // 链表类,外部只能看这一个类
    // 定义在内部,主要为Link类服务    
    private class Node{ // 定义的节点类
        private String data; // 保存数据
        private Node next; // 引用关系
        public Node(String data){
            this.data = data;
        }
        // ===================以上为内部类============================
    }
    private Node root; // 根结点

}

   而随后主要就是进行代码的填充,以及功能的完善

数据增加

  public void add(数据类型 变量)

   如果要进行新数据的增加,则应该由Link类负责节点对象的增加,并且由Link类维护根节点,所有节点的关系匹配交给Node负责处理

class Link{ // 链表类,外部只能看这一个类
    // 定义在内部,主要为Link类服务    
    private class Node{ // 定义的节点类
        private String data; // 保存数据
        private Node next; // 引用关系
        public Node(String data){
            this.data = data;
        }
        public void AddNode(Node newNode){
            if(this.next == null){ // 当前的下一个节点为空
                this.next = newNode;
            }else{     // 向后继续保存
                this.next.AddNode(newNode);
            }
        }

        public void printNode(){ // 打印Node信息
            System.out.println(this.data);
            if( this.next != null){
                this.next.printNode();
            }
        }

        // ===================以上为内部类============================
    }
    private Node root; // 根结点
    public void add(String data){  // 假设不允许有null
        if (data == null){
            return ;
        }
        Node newNode = new Node(data); // 要保存的数据
        if (this.root == null){ // 如果当前没有根节点,则设置为根节点
            this.root = newNode; // 保存根节点
        }else{ // 存在根节点,则到下一节点找保存数据
            this.root.AddNode(newNode);
        }

    }

    public void print(){ // 打印所有Node信息
        root.printNode();
    }

}

public class LinkDemo{
    public static void main(String args[]){
        Link all = new Link();
        all.add("Hello");
        all.add("World");
        all.add(null);
        all.print();
    }
}

  此时使用了一个不许为null的判断。但并不是所有的链表都不许为null 

猜你喜欢

转载自www.cnblogs.com/anyux/p/11874094.html