Java单链表(一)

    选择打赏方式

Java单链表

引言:

在解决实际问题的时候数组,集合等存储数据的时候可能无法满足我们的需求,然后就引出了链表的概念,链表又分为多种

单链表结构的特点

一种链式存取的数据结构,单链表中的数据是以结点的形式存在,每一个结点是由数据元素和下一个结点的存储的位置组成。单链表与数组相比的最大差别是:单链表的数据元素存放在内存空间的地址是不连续的,而数组的数据元素存放的地址在内存空间中是连续的,这也是为什么根据索引无法像数组那样直接就能查询到数据元素。

单链表的增删改查

首先创建类,里面包含数据和指针

创建一个person类,存数据

class Person{
    int id;
    String name;
    int age;
    //下一个节点的指针
    public Person next;
    public Person(int id,String name,int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age+"}'";
    }
}

创建一个SingalList类增删改查都在里面进行

创建一个头部指针,头指针是不能被改变的,否则将找不到数据,创建另一个类,用于添加数据,这里需要创建动态指针,用于添加数据,一个数据的next指向下一个数据最后一个倒数第二个数据的next为null,代表链表到此结束

class SingleList{
    //初始化一个头结点
    private Person head = new Person(0,"",0);
    //添加节点到单项链表
    //找到最后一个,然后添加
    public void addData(Person node){
        //需要一个辅助节点
        Person temp = head;
        //遍历链表,找到自后
        while(true){
            if(temp.next == null){
                break;
            }
            temp = temp.next;
        }
        //当退出
        temp.next = node;
    }
    }

指定增加的数据ID,判断当前链表是否为空,为空则可以添加,否则判断是否存在次数据,存在则可以添加

    public void Add(Person person) {
        Person temp = head;
        boolean flag = true;
        while (flag) {
            if (temp.next == null) {
                break;
            } else if (temp.next.id > person.id) {
                flag = true;
                break;
            } else if (temp.next.id == person.id) {
                System.out.println(temp.next.id + "已经存在,添加失败");
                return;
            }
            temp = temp.next;
        }
        if (flag == true) {
            person.next = temp.next;
            temp.next = person;
        }
    }

判断指定的ID和链表中每一个数据的ID,相等则改变他们的指针指向,从而删除数据,但是如果那一块内存没有被系统使用,那么这个数据任然会保留

    public void delete(int id) {
        Person temp = head;
        while (true) {
            if (temp.next == null) {
                System.out.println("该链表为空");
                return;
            } else if (temp.next.id == id) {
                temp.next = temp.next.next;
                System.out.println("删除成功");
                break;
            }
            temp = temp.next;
        }
    }

判断指定ID和需要更改的数据的ID是否相等,相等则执行相关操作

    public void change(Person person) {
        Person temp = head;
        while (true) {
            if (temp.next == null) {
                System.out.println("该链表为空值");
                return;
            } else if (temp.next.id == person.id) {
                person.next = temp.next.next;
                temp.next = person;
                System.out.println("修改成功");
                break;
            }
            temp = temp.next;
        }
    }

判断链表是否为空,为空则直接结束程序,否则按照动态指针变量从头遍历到尾

    public void list() {
        //判断链表是否为空
        if (head.next == null) {
            System.out.println("链表为空");
            return;
        }
        //因为头结点不为空
        Person temp = head.next;
        while (true) {
            if (temp == null) {
                break;
            }
            //输出
            System.out.println(temp);
            temp = temp.next;
        }
    }
版权声明:若无特殊注明,本文为《若离风》原创,转载请保留文章出处。
本文链接:https://www.rlfit.cn/post-53.html
正文到此结束

热门推荐

发表吐槽

你肿么看?

你还可以输入 250 / 250 个字

嘻嘻 大笑 可怜 吃惊 害羞 调皮 鄙视 示爱 大哭 开心 偷笑 嘘 奸笑 委屈 抱抱 愤怒 思考 日了狗 胜利 不高兴 阴险 乖 酷 滑稽

评论信息框
可使用QQ号实时获取昵称+头像

私密评论

吃奶的力气提交吐槽中...


既然没有吐槽,那就赶紧抢沙发吧!