单向链表(2021-11-12)

package packageA;

interface ILink<A> {
    public void add(A data); // 增加节点

    public int getLength(); // 获取节点个数

    public boolean isEmpty(); // 判断链表是否为空

    public Object[] toArray(); // 链表转化为数组

    public A getData(int index); // 根据序号获取数据

    public void setData(int index, A data); // 根据序号赋值

    public boolean contains(A data); // 判断数据是否在链表中

    public void remove(A data); // 删除节点

    public void clean(); // 清空链表
}

class LinkImpl<A> implements ILink<A> {
    class Node { // 将节点设为内部类
        private A data;
        private Node next = null;

        public Node(A data) {
            this.data = data;
        }
    }

    private Node root = null;
    private int length = 0;
    private Object[] array = null;

    public void add(A data) {
        Node newNode = new Node(data);
        this.length++;

        if (this.root == null) {
            this.root = newNode;
        } else {
            Node temp = this.root;
            while (temp.next != null) {
                temp = temp.next;
            }
            temp.next = newNode;
        }
    }

    public int getLength() {
        return this.length;
    }

    public boolean isEmpty() {
        return this.root == null;
    }

    public Object[] toArray() {
        if (this.isEmpty()) {
            return null;
        } else {
            array = new Object[this.length];
            Node temp = this.root;
            int counter = 0;
            while (temp != null) {
                array[counter++] = temp.data;
                temp = temp.next;
            }
            return array;
        }
    }

    public A getData(int index) {
        Node temp = this.root;
        while (index != 0) {
            temp = temp.next;
            index--;
        }
        return temp.data;
    }

    public void setData(int index, A data) {
        Node temp = this.root;
        while (index != 0) {
            temp = temp.next;
            index--;
        }
        temp.data = data;
    }

    public boolean contains(A data) {
        Node temp = this.root;
        while (temp != null) {
            if (data.equals(temp.data)) {
                return true;
            } else
                temp = temp.next;
        }
        return false;
    }

    public void remove(A data) {
        if (this.root == null) {
            return;
        }
        if (data.equals(this.root.data)) {
            root = root.next;
        }
        Node previous = this.root;
        Node temp = this.root.next;
        while (temp != null) {
            if (data.equals(temp.data)) {
                previous.next = temp.next;
                this.length--;
                temp = null;
            } else {
                previous = temp;
                temp = temp.next;
            }
        }
    }

    public void clean() {
        this.root = null;
        this.length = 0;
    }

}

public class Main {
    public static void main(String[] args) {
        ILink<String> link = new LinkImpl<String>();
        System.out.println("[当前节点个数]" + link.getLength() + " 、[链表是否为空]" + link.isEmpty());
        link.add("你好");
        link.add("世界");
        link.add("我是战士k");
        System.out.println("——————————转化为数组,然后输出——————————");
        for (Object data : link.toArray()) {
            System.out.println(data);
        }
        System.out.println("[当前节点个数]" + link.getLength() + " 、[链表是否为空]" + link.isEmpty());
        System.out.println();
        System.out.println("[2号节点数据]" + link.getData(2));
        link.setData(2, "我是fighterk");
        System.out.println("[修改后的2号节点数据]" + link.getData(2));
        System.out.println("[包含“世界”吗]" + link.contains("世界"));
        System.out.println("[包含“world”吗]" + link.contains("world"));
        link.remove("世界");
        System.out.println("——————————删除了“世界”之后的链表——————————");
        for (Object data : link.toArray()) {
            System.out.println(data);
        }
        link.clean();
        System.out.println("[清空的链表isEmpty]"+link.isEmpty());
        
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • ![Flask](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAW...
    极客学院Wiki阅读 12,213评论 0 3
  • 不知不觉易趣客已经在路上走了快一年了,感觉也该让更多朋友认识知道易趣客,所以就谢了这篇简介,已做创业记事。 易趣客...
    Physher阅读 8,968评论 1 2
  • 双胎妊娠有家族遗传倾向,随母系遗传。有研究表明,如果孕妇本人是双胎之一,她生双胎的机率为1/58;若孕妇的父亲或母...
    邺水芙蓉hibiscus阅读 9,106评论 0 2
  • 晴天,拥抱阳光,拥抱你。雨天,想念雨滴,想念你。 我可以喜欢你吗可以啊 我还可以喜欢你吗可以,可是你要知道我们不可...
    露薇霜凝阅读 5,027评论 1 2

友情链接更多精彩内容