链表

64 阅读1分钟

4.1介绍

1659778512503.png

4.2链表的应用实例

1659778569280.png

1659778592240.png

代码实现

package LinkedList;
​
public class LinkedListDemo {
    public static void main(String[] args) {
//        HeroNode h1 = new HeroNode(1, "h1", "nh1");
//        HeroNode h2 = new HeroNode(2, "h2", "nh2");
//        HeroNode h3 = new HeroNode(3, "h3", "nh3");
//        HeroNode h4 = new HeroNode(4, "h4", "nh4");
        HeroNode h1 = new HeroNode(1, "h1", "nh1");
        HeroNode h2 = new HeroNode(2, "h2", "nh2");
        HeroNode h4 = new HeroNode(4, "h4", "nh4");
        HeroNode h3 = new HeroNode(3, "h3", "nh3");
        HeroNodeLinkedList hList = new HeroNodeLinkedList();
        hList.addByOrder(h1);
        hList.addByOrder(h2);
        hList.addByOrder(h3);
        hList.addByOrder(h4);
        hList.list();
    }
}
​
class HeroNode {
    public int no;
    public String name;
    public String nickname;
    public HeroNode next;
​
    public HeroNode(int hno, String hName, String hNickname) {
        this.no = hno;
        this.name = hName;
        this.nickname = hNickname;
    }
​
    @Override
    public String toString() {
        return "HeroNode{" +
                "no=" + no +
                ", name='" + name + ''' +
                ", nickname='" + nickname + ''' +
                '}';
    }
}
​
class HeroNodeLinkedList {
    private HeroNode headNode = new HeroNode(0, "", "");
​
    public void add(HeroNode heroNode) {
        HeroNode temp = headNode;
        while (true) {
            if (temp.next == null) {
                break;
            }
            temp = temp.next;
        }
        temp.next = heroNode;
    }
​
    public void addByOrder(HeroNode heroNode) {
        HeroNode temp = headNode;
        System.out.println(temp == headNode);
        boolean flag = false;
        while (true) {
            if (temp.next == null) {
                break;
            }
            if (temp.next.no > heroNode.no) {
                break;
            } else if (temp.next.no == heroNode.no) {
                flag = false;
                break;
            }
            temp = temp.next;
        }
        if (flag) {
            System.out.printf("插入的英雄%d已经存在", heroNode.no);
        } else {
            heroNode.next = temp.next;
            temp.next = heroNode;
        }
    }
​
    public void list() {
        if (headNode.next == null) {
            return;
        }
        HeroNode temp = headNode.next;
        while (true) {
            if (temp == null) {
                break;
            }
            System.out.println(temp.toString());
            temp = temp.next;
        }
    }
​
    public void update(HeroNode newHeroNode) {
        if(headNode.next == null){
            System.out.println("链表为空");
            return;
        }
        HeroNode temp = headNode.next;
        boolean flag = false;
        while (true) {
            if (temp == null) {
                break;
            }
            if (temp.no == newHeroNode.no) {
                flag = true;
                break;
            }
            temp = temp.next;
        }
        if (flag) {
            temp.name = newHeroNode.name;
            temp.nickname = newHeroNode.nickname;
        } else {
            System.out.printf("找不到编号为%d的英雄,无法更新", newHeroNode.no);
        }
    }
​
    public void del(int n) {
        if(headNode.next == null) {
            return;
        }
        HeroNode temp = headNode.next;
        boolean flag = false;
        while (true) {
            if(temp == null) {
                break;
            }
            if(temp.next.no == n) {
                flag = true;
                break;
            }
            temp = temp.next;
        }
        if (flag) {
            temp.next = temp.next.next;
        }else {
            System.out.println("元素未找到");
        }
    }
}

\