數據結構與算法-1.3單鏈表的增刪改查操作

1.節點類

package com.mytest.controller;

import java.io.Serializable;
import java.util.Objects;

public class HeroNode implements Serializable {

    private static final long serialVersionUID = -670663634573207331L;

    private Integer num;
    private String name;
    private String nickName;
    private HeroNode nextNode;

    public HeroNode() {
    }

    public HeroNode(Integer num, String name, String nickName) {
        this.num = num;
        this.name = name;
        this.nickName = nickName;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        HeroNode heroNode = (HeroNode) o;
        return Objects.equals(num, heroNode.num) &&
                Objects.equals(name, heroNode.name) &&
                Objects.equals(nickName, heroNode.nickName) &&
                Objects.equals(nextNode, heroNode.nextNode);
    }

    @Override
    public int hashCode() {
        return Objects.hash(num, name, nickName, nextNode);
    }

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

    public Integer getNum() {
        return num;
    }

    public void setNum(Integer num) {
        this.num = num;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNickName() {
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }

    public HeroNode getNextNode() {
        return nextNode;
    }

    public void setNextNode(HeroNode nextNode) {
        this.nextNode = nextNode;
    }
}

2. 單鏈表類

package com.mytest.controller;

public class SingleLinkList {
    private HeroNode headNode = new HeroNode(0,"","");

    public void addNode(HeroNode node){
        HeroNode temp = headNode;
        while (true){
            if (temp.getNextNode()==null){
                break;
            }
            temp = temp.getNextNode();
        }
        temp.setNextNode(node);
    }

    public void list(){
        if (headNode.getNextNode()==null){
            System.out.println("鏈表爲空");
            return;
        }
        HeroNode flag = headNode;
        while (true){
            if (flag.getNextNode()!=null){
                System.out.println(flag.getNextNode());
                flag = flag.getNextNode();
            }else{
                break;
            }
        }
    }

    public String addNodeOrder(HeroNode heroNode){
        HeroNode temp = headNode;
        while (true){
            if (temp.getNextNode()==null){
                temp.setNextNode(heroNode);
                return "添加成功";
            }else {
                if (heroNode.getNum()==temp.getNextNode().getNum()){
                    return "數據重複,添加失敗";
                }else if (heroNode.getNum()<temp.getNextNode().getNum()){
                    heroNode.setNextNode(temp.getNextNode());
                    temp.setNextNode(heroNode);
                    return "添加成功";
                }
                temp = temp.getNextNode();
            }
        }
    }

    public String updateNode(HeroNode heroNode){
        HeroNode temp = headNode;
        while (true){
            if (temp.getNextNode()==null){
                return "修改失敗";
            }
            while (true){
                if (temp.getNextNode()==null){
                    break;
                }
                if (temp.getNextNode().getNum()==heroNode.getNum()){
                    temp.getNextNode().setName(heroNode.getName());
                    temp.getNextNode().setNickName(heroNode.getNickName());
                    return "修改成功";
                }
                temp = temp.getNextNode();
            }
        }
    }

    public String deleteNode(HeroNode heroNode){
        HeroNode temp = headNode;
        while (true){
            if (temp.getNextNode()==null){
                return "失敗";
            }
            while (true){
                if (temp.getNextNode()==null){
                    break;
                }
                if (temp.getNextNode().getNum()==heroNode.getNum()){
                    if(temp.getNextNode().getNextNode()!=null){
                        temp.setNextNode(temp.getNextNode().getNextNode());
                        return "成功";
                    }else{
                        temp.setNextNode(null);
                        return "成功";
                    }

                }
                temp = temp.getNextNode();
            }
        }
    }


}

3.測試類

package com.mytest.controller;

public class Demo03 {
    public static void main(String[] args) {
        HeroNode heroNode1 = new HeroNode(1,"松江1","及時雨");
        HeroNode heroNode2 = new HeroNode(5,"松江5","及時雨");
        HeroNode heroNode3 = new HeroNode(6,"松江6","及時雨");
        HeroNode heroNode4 = new HeroNode(6,"松江6","及時雨");
        HeroNode heroNode5 = new HeroNode(3,"松江3","及時雨");

        SingleLinkList singleLinkList = new SingleLinkList();
        /*
        //1.在末尾追加節點
        singleLinkList.addNode(heroNode1);
        singleLinkList.addNode(heroNode2);
        singleLinkList.addNode(heroNode3);
        singleLinkList.addNode(heroNode4);
        singleLinkList.addNode(heroNode5);*/

        // 按順序添加節點
        String s1 = singleLinkList.addNodeOrder(heroNode1);
        System.out.println(s1);
        String s2 = singleLinkList.addNodeOrder(heroNode2);
        System.out.println(s2);
        String s3 = singleLinkList.addNodeOrder(heroNode3);
        System.out.println(s3);
        String s4 = singleLinkList.addNodeOrder(heroNode4);
        System.out.println(s4);
        String s5 = singleLinkList.addNodeOrder(heroNode5);
        System.out.println(s5);
        singleLinkList.list();

        // 修改節點
        HeroNode heroNode6 = new HeroNode(1,"EZ","伊澤");
        String s = singleLinkList.updateNode(heroNode6);
        System.out.println(s);
        singleLinkList.list();

        // 刪除節點
        HeroNode heroNode7 = new HeroNode(5,"","");
        String s7 = singleLinkList.deleteNode(heroNode7);
        System.out.println(s7);
        singleLinkList.list();
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章