关键词搜索

源码搜索 ×
×

(Java)单向链表实现(2)

发布2020-01-05浏览502次

详情内容

由上节可知,如果由用户去处理各个节点的关系,会非常麻烦,所以最好将节点的操作进行封装,这样用户使用起来会比较方便。

例如如果要删除节点,则直接修改上一个节点的引用即可:
在这里插入图片描述

class Link{
    class Node{ // 将节点类定义成内部类
        private String data;
        private Node next;
        public Node(String data){
            this.data = data;
        }
        public void add(Node newNode){ // 增加一个 add 操作
            if(this.next == null){ // 判断下一个节点是否为空
                this.next = newNode; // 如果下一个节点为空,则把新节点设置在next位置上
            }else { // 如果不为空,表示还有下一个节点
                this.next.add(newNode); // 在一个位置增加
            }
        }
        public void print(){
            System.out.print(this.data + "\t");
            if(this.next !=null){ // 如果下一个节点不为空,则继续打印
                this.next.print(); // 让下一个节点输出
            }
        }
        public boolean search(String data){ // 内部定义搜索方法
            if(data.equals(this.data)){ // 判断当前节点的名字是否与查找的一致
                return true; // 如果一致,则返回 true
            }else {
                if(this.next != null){ // 下一个节点存在,则继续查找
                    return this.next.search(data); // 返回下一个查询结果
                }else {
                    return false; // 节点不存在,返回 false
                }
            }
        }
        public void delete(Node previous,String data){
            // 删除节点
            if(data.equals(this.data)){
                previous.next = this.next; // 空出当前节点
            }else {
                if(this.next !=null){
                    this.next.delete(this,data); // 继续向下找
                }
            }
        }
    };
    private Node root; // 表示根节点
    public void addNode(String data){
        // 增加节点的方法
        Node newNode = new Node(data); // 建立一个新的节点
        if(this.root == null){ // 没有根节点
            this.root = newNode; // 将第一个节点设置为根节点
        }else{
            this.root.add(newNode); // 添加到合适的位置
        }
    }
    public void printNode(){ // 打印全部的节点
        if(this.root !=null){ // 判断是否存在根节点
            this.root.print();
        }
    }
    public boolean contains(String name){ // 判断元素是否存在
        return this.root.search(name); // 调用Node 类中的 search() 方法
    }
    public void deleteNode(String data){ // 删除节点
        if(this.contains(data)){ // 如果节点存在,则执行删除操作
            if(this.root.data.equals(data)){ //判断根节点是否满足要求
                this.root = this.root.next; // 将根节点之后的内容设置成根节点
            }else {
                this.root.next.delete(root,data); // 删除节点
            }
        }
    }
};

public class Test{
    public static void main(String[] args){
        Link l = new Link();
        // 增加节点 A,B,C,D,E
        l.addNode("A");
        l.addNode("B");
        l.addNode("C");
        l.addNode("D");
        l.addNode("E");
        System.out.println("=======删除之前=======");
        l.printNode(); // 输出节点
        l.deleteNode("C"); // 删除节点
        l.deleteNode("D"); // 删除节点
        System.out.println();
        System.out.println("=======删除之后=======");
        l.printNode();
        System.out.println("查询节点:" + l.contains("A"));
    }
}

    在这里插入图片描述
    上面的程序对要操作的节点类进行了包装,用户可以直接调用包装后的类,即可方便执行节点的增加、删除、查找操作。

    此处理解其操作原理即可,实际应用中,Java 已经为用户提供了大量的数据结构实现类

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载