
 
 public class HeroNodeDemo {
    public static void main(String[] args) {
        HeroNode hero1 = new HeroNode(1, "松江");
        HeroNode hero2 = new HeroNode(2, "武松");
        HeroNode hero3 = new HeroNode(3, "及时雨");
        HeroNode hero4 = new HeroNode(4, "吴用");
        HeroNode hero5 = new HeroNode(4, "常毅");
        SingledList singledList = new SingledList();
        singledList.add(hero1);
        singledList.add(hero2);
        singledList.add(hero3);
        singledList.add(hero4);
        singledList.delete(3);
        singledList.show();
    }
}
/**
 * 创建一个管理节点的类
 */
class SingledList {
    /**
     *  初始化一个头节点,头节点不能储有效数据,因为头节点可以帮助我们确定节点的初始位置
     *  因此头节点不能动
     */
    HeroNode head = new HeroNode(0, "");
    /**
     * 定义一个用于添加节点的方法
     * @param heroNode
     */
    public void add(HeroNode heroNode) {
        // 因为头节点不能动,所以设置一个指针节点
        HeroNode temp = head;
        // 使用循环,遍历到最后一个节点
        while (true) {
            if (temp.next == null) {
                break;
            }
            temp = temp.next;
        }
        temp.next = heroNode;
    }
    /**
     * 定义一个用于修改节点的方法,根据节点的编号进行修改,即节点编号不可更改。
     */
    public void update(HeroNode heroNode) {
        // 定义一个辅助节点
        HeroNode temp = head;
        // 进行链表是否为空判断
        if (head.next == null) {
            System.out.println("链表为空");
            return;
        }
        // 表示节点编号是否被找到
        boolean flag = false;
        // 使用循环去找节点编号
        while (true) {
            if (temp.no == heroNode.no) {
                flag = true;
                break;
            }
            if (temp.next == null) {
                break;
            }
            temp = temp.next;
        }
        // 如果找到节点,就去修改值
        if (flag) {
            temp.name = heroNode.name;
        } else {
            System.out.println("输入有误");
        }
    }
    /**
     * 遍历节点的方法
     */
    public void show() {
        // 通过头节点判断链表是否为空
        HeroNode temp = head;
        while (true) {
            if (temp.next == null) {
                break;
            }
            // 每次输出确保是可以进行输出的
            HeroNode heroInfo = temp.next;
            System.out.println(heroInfo);
            temp = temp.next;
        }
    }
    /**
     * 根据节点的编号删除对应的节点
     * @param no
     */
    public void delete(int no) {
        HeroNode temp = head;
        while (true) {
            if (temp.next == null) {
                System.out.println("要删除的节点不存在");
                break;
            }
            if (temp.next.no == no) {
                temp.next = temp.next.next;
                break;
            }
            temp = temp.next;
        }
    }
}
/**
 * 每个类实例就是一个节点
 */
class HeroNode {
    public int no;
    public String name;
    public HeroNode next;
    public HeroNode(int no, String name) {
        this.no = no;
        this.name = name;
    }
    @Override
    public String toString() {
        return "HeroNode{" +
                "no=" + no +
                ", name='" + name + '\'' +
                '}';
    }
}
 
 
 



















