java单向链表实现

java单向链表实现

class NodeManager {
    private Node root;      /*跟节点对象*/
    private Integer currentIndex = 0;   /*链表索引*/

    //从链表尾部添加
    public void add(Object obj) {
        Node node = new Node(obj);
        if (this.root == null)
            this.root = node;
        else
            this.root.addNode(node);
    }

    // 从链表a1节点后面添加节点a2
    public void add(Object a1, Object a2) {
        Node node = new Node(a2);
        if (this.root.obj == a1) {
            node.after = this.root.after;
            this.root.after = node;
        } else if (this.root.after != null) {
            this.root.addNode(a1, node);
        } else {
            System.out.println("链表节点=" + a1 + "不存在");
        }
    }

    //从链表尾部移除
    public void remove(Object a1) {
        if (this.root.obj == a1) {
            this.root = this.root.after;
        } else if (this.root.after != null) {
            this.root.removeNode(a1);
        } else {
            System.out.println("链表节点=" + a1 + "不存在");
        }
    }

    public void removeIndex(Integer index){
        currentIndex =0;
        if (this.root == null){
            System.out.println("链表没有任何内容");
        }else if (currentIndex == index){
            this.root = this.root.after;
        }else if (this.root.after != null){
            this.root.removeIndexNode(index);
        }else
            System.out.println("链表中没有索引="+index +"的节点");
    }

    //在链表元素a1,替换为a2
    public void set(Object a1, Object a2) {
        Node node = new Node(a2);
        if (this.root.obj == a1) {
            node.after = this.root.after;
            this.root = node;
        } else if (this.root.after != null) {
            this.root.setNode(a1, node);
        } else {
            System.out.println("链表节点=" + a1 + "不存在");
        }
    }

    // 根据索引,获取指定内容
    public Object get(Integer index) {
        currentIndex = 0;
        if (this.root == null) {
            return "链表中没有 '" + index + "'的索引";
        } else if (index == currentIndex) {
            return this.root.obj;
        } else
            return this.root.getNode(index);
    }

    // 依次显示整个链表的所有的节点
    public void showAll() {
        System.out.println("*******************************************");
        System.out.println(this.root.obj);
        this.root.showNode();
    }

    //  根据内容判断指定的内容是否存在
    public boolean contains(Object obj) {
        if (this.root.obj == obj)
            return true;
        else if (this.root.after != null)
            return this.root.containsNode(obj);
        else
            return false;
    }

    public Integer size() {
        currentIndex = 0;
        if (this.root == null)
            return currentIndex;
        else
            return this.root.sizeNode();
    }


    /*内部类*/
    private class Node {
        private Object obj;     /*节点内容*/
        private Node after;     /*当前节点的下一个节点*/

        public Node(Object obj) {
            this.obj = obj;
        }

        public void addNode(Node node) {
            if (this.after == null)
                this.after = node;
            else
                this.after.addNode(node);
        }

        public void addNode(Object a1, Node node) {
            if (this.after.obj == a1) {
                node.after = this.after.after;
                this.after.after = node;
            } else if (this.after.after != null) {
                this.after.addNode(a1, node);
            } else {
                System.out.println("链表节点=" + a1 + "不存在");
            }
        }

        public void setNode(Object a1, Node node) {
            if (this.after.obj == a1) {
                node.after = this.after.after;
                this.after = node;
            } else if (this.after.after != null) {
                this.after.setNode(a1, node);
            } else {
                System.out.println("链表节点=" + a1 + "不存在");
            }
        }

        public void showNode() {
            if (this.after != null) {
                System.out.println(this.after.obj);
                this.after.showNode();
            } else
                return;
        }

        // 根据内容删除指定的元素
        public void removeNode(Object a1) {
            if (this.after.obj == a1) {
                this.after = this.after.after;
            } else if (this.after.after != null) {
                this.after.removeNode(a1);
            } else {
                System.out.println("链表节点=" + a1 + "不存在");
            }
        }

        public Object getNode(Integer index) {
            currentIndex++;
            if (currentIndex == index) {
                return this.after.obj;
            } else if (this.after.after != null) {
                return this.after.getNode(index);
            } else {
                return "链表节点索引=" + index + "不存在";
            }
        }

        public boolean containsNode(Object obj) {
            if (this.after.obj == obj)
                return true;
            else if (this.after.after != null)
                return this.after.containsNode(obj);
            else
                return false;
        }

        public Integer sizeNode() {
            currentIndex++;
            if (this.after != null) {
                return this.after.sizeNode();
            } else
                return currentIndex;
        }

        public void removeIndexNode(Integer index) {
            currentIndex++;
            if (currentIndex == index)
                this.after = this.after.after;
            else if (this.after.after != null)
                this.after.removeIndexNode(index);
            else
                System.out.println("链表节点索引=" + index + "不存在");
        }
    }
}


class test {
    public static void main(String[] args) {
        NodeManager manager = new NodeManager();
        manager.add("1");
        manager.add("2");
        manager.add("3");
        manager.add("4");
        manager.add("5");
//        manager.add("2", "14");
//        manager.set("3", "6");
//        manager.remove("1");
        manager.removeIndex(6);
        System.out.println("get(4)="+manager.get(4));
        System.out.println("size()"+manager.size());
        System.out.println("contains(16)"+manager.contains("16"));
        System.out.println("contains(14)"+manager.contains("14"));
        manager.showAll();
    }
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值