Java 实现自定义链表

节点类 Node.java


public class Node {
    /** 当前节点的数据*/
    private String data;
    /** 如果当前节点是首/尾节点 NULL 或者是 下一个节点的实例*/
    private Node next;

    public Node(final String data) {
        this.data = data;
    }

    public void setNext(final Node next) {
        this.next = next;
    }

    public Node getNext() {
        return this.next;
    }

    public String getData() {
        return this.data;
    }

    public void addNode(final Node newNode) {
        if (this.next == null) {
            this.next = newNode;
        } else {
            this.next.addNode(newNode);
        }
    }

    public void printNode() {
        System.out.println(this.data);
        if (this.next != null) {
            this.next.printNode();
        }
    }

    public boolean containNode(final String data) {
        /** 比对当前节点数据是否相同*/
        if (this.data.equals(data)) {
            return true;
        } else {
            if (this.next != null) {
                return this.next.containNode(data);
            } else {
                return false;
            }
        }
    }

    public void removeNode(final Node previous, final String data) {
        /** 比对当前节点数据是否和将要删除的数据相同*/
        if (this.data.equals(data)) {
            /** 数据相同的前提下 把下一个节点覆盖到上一个节点的 next*/
            previous.next = this.next;
        } else {
            this.next.removeNode(this, data);
        }
    }

}

操作功能类 Link.java


public class Link {
    private Node root;

    public void add(final String data) {
        if (data == null || this.contains(data)) {
            return;
        }

        Node newNode = new Node(data);
        if (this.root == null) {
            this.root = newNode;
        } else {
            this.root.addNode(newNode);
        }
    }

    public void print() {
        if (this.root != null) {
            this.root.printNode();
        }
    }

    public boolean contains(final String data) {
        if (data == null || this.root == null) {
            return false;
        }

        return this.root.containNode(data);
    }

    public void remove(final String data) {
        /** 1. 首先判断是否有相同数据节点*/
        if (this.contains(data)) {
            /** 2. 将要删除的数据和当前根节点数据节点相同的话 把下一个节点覆盖到根节点*/
            if (this.root.getData().equals(data)) {
                this.root = this.root.getNext();
            } else {
                /** 通过当前根节点和将要删除的数据, 删除节点*/
                this.root.getNext().removeNode(this.root , data);
            }
        }
    }

}

App.java


public class App {
    public static void main(String[] args) {
        final Link list = new Link();
        list.add("馒头");
        list.add("豆浆");
        list.add("茶叶蛋");
        list.add("包子");
        list.add("麻花");
        list.add("豆浆");

        /** 删除*/
        list.remove("包子");
        list.remove("豆浆");

        /** 打印*/
        list.print();

        /** 查询*/
        System.out.println(list.contains("馒头"));
        System.out.println(list.contains("豆浆"));
    }

}

结果:
> 馒头
> 茶叶蛋
> 麻花
> true
> false

如果您觉得有帮助,欢迎点赞哦 ~ 谢谢!!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值