1-1-链表

1 单链表

1.1 链表创建

1.1.1 HeroNode

class HeroNode {
    public int id;
    public String name;
    /**
     * 用来指向下一个节点
     */
    public HeroNode next;

    public HeroNode(int id, String name) {
        this.id = id;
        this.name = name;
    }

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

1.1.2 SingleLinkedLiseDemo

class SingleLinkedLiseDemo {
    /**
     * 定义头节点
     */
    private HeroNode head = new HeroNode(0, "");

    /**
     * 头节点是用来方便进行查找
     * 有个方法来进行获取头节点
     *
     * @return 获取到的头节点
     */
    public HeroNode getHead() {
        return head;
    }

    /**
     * 添加节点信息
     *
     * @param heroNode 待添加节点的信息
     */
    public void addHeroNode(HeroNode heroNode) {
        // 因为 HeroNode 节点是不能动的,需要一个辅助节点:temp
        HeroNode temp = head;
        // 添加数据
        while (temp.next != null) {
            // 添加数据是尾插法,只能通过.next的方式来进行添加
            temp = temp.next;
        }
        temp.next = heroNode;
    }

    /**
     * 显示列表
     *
     * @param head 头节点
     */
    public void showLinkedList(HeroNode head) {
        // 判断链表是否为空
        if (head.next == null) {
            System.out.println("链表显示为空~~~");
            return;
        }
        // 因为我们的头节点是不能访问的,所以我们需要一个辅助变量来遍历
        HeroNode temp = head.next;
        while (temp != null) {
            System.out.println(temp);
            temp = temp.next;
        }
    }

    /**
     * 修改链表:(1,刘备)---> (2,张飞)---> (3,关羽)
     * temp.id  = heroNode.id ---> temp.name = heroNode.name
     *
     * @param heroNode 需要修改的节点
     */
    public void updateLinkedList(HeroNode heroNode) {
        // 判断链表是否为空
        if (head.next == null) {
            System.out.println("更新链表为空~~~");
            return;
        }
        HeroNode temp = head.next;
        boolean flag = false;
        // 遍历是否找到对应的节点
        while (true) {
            // 如果找到
            if (temp.id == heroNode.id) {
                flag = true;
                break;
            }
            if (temp.next == null) {
                System.out.println("防止空指针异常~~~");
                break;
            }
            temp = temp.next;
        }
        if (flag) {
            temp.name = heroNode.name;
        } else {
            System.out.println("没有找到ID:" + heroNode.id);
        }
    }

    /**
     * 删除节点
     *
     * @param id ID
     */
    public void delLinkedList(int id) {
        HeroNode temp = head;
        boolean flag = false;
        // 找到待删除的第一个节点
        while (true) {
            // 已经遍历到最后推出循环
            if (temp.next == null) {
                break;
            }
            if (temp.next.id == id) {
                flag = true;
                break;
            }
            temp = temp.next;
        }
        if (flag) {
            temp.next = temp.next.next;
        } else {
            System.out.println("没有找到ID:" + id);
        }
    }

    /**
     * 顺序插入排序
     *
     * @param heroNode 顺序插入排序
     */
    public void addReOrder(HeroNode heroNode) {
        HeroNode temp = head;
        boolean flag = false;
        while (true) {
            if (temp.next == null) {
                flag = true;
                break;
            } else if (temp.id > heroNode.id) {
                flag = true;
                break;
            } else if (temp.id == heroNode.id) {
                break;
            }
            temp = temp.next;
        }
        if (flag) {
            heroNode.next = temp.next;
            temp.next = heroNode;
        } else {
            System.out.println("ID: " + heroNode.id + ",重复~~~");
        }

    }
}

1.1.3 SingleLinkedList

package com.wmy.jc.linkedlist.example02;

/**
 * ******************* 书上有路勤为径 *******************
 *
 * @project_name: interview-dev-2022
 * @package_name: com.wmy.jc.linkedlist.example02
 * @Author: wmy
 * @Date: 2021/12/18
 * @Major: 数据科学与大数据技术
 * @Post:大数据实时开发
 * @Email:wmy_2000@163.com
 * @Desription: Flink 实时开发程序 ---> 链表的创建
 * @Version: wmy-version-01
 * ******************* 学海无涯苦做舟 *******************
 */
public class SingleLinkedList {
    public static void main(String[] args) {

        SingleLinkedLiseDemo singleLinkedLiseDemo = new SingleLinkedLiseDemo();
        // 节点信息
        HeroNode heroNode1 = new HeroNode(1, "刘备");
        HeroNode heroNode2 = new HeroNode(2, "张飞");
        HeroNode heroNode3 = new HeroNode(3, "关羽");
        HeroNode heroNode4 = new HeroNode(4, "吕布");
        HeroNode heroNode5 = new HeroNode(5, "貂蝉");

        // 添加节点
        //singleLinkedLiseDemo.addHeroNode(heroNode1);
        //singleLinkedLiseDemo.addHeroNode(heroNode2);
        //singleLinkedLiseDemo.addHeroNode(heroNode3);
        //singleLinkedLiseDemo.addHeroNode(heroNode4);
        //singleLinkedLiseDemo.addHeroNode(heroNode5);

        singleLinkedLiseDemo.addReOrder(heroNode5);
        singleLinkedLiseDemo.addReOrder(heroNode1);
        singleLinkedLiseDemo.addReOrder(heroNode3);
        singleLinkedLiseDemo.addReOrder(heroNode2);
        singleLinkedLiseDemo.addReOrder(heroNode4);

        // 显示列表
        System.out.println("修改前的链表~~~");
        singleLinkedLiseDemo.showLinkedList(singleLinkedLiseDemo.getHead());

        // 修改节点
        singleLinkedLiseDemo.updateLinkedList(new HeroNode(5, "XXX"));
        System.out.println("修改后的链表~~~");
        singleLinkedLiseDemo.showLinkedList(singleLinkedLiseDemo.getHead());

        // 删除
        singleLinkedLiseDemo.delLinkedList(5);

        // 显示列表
        System.out.println("删除后的链表~~~");
        singleLinkedLiseDemo.showLinkedList(singleLinkedLiseDemo.getHead());

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值