单向链表

233 阅读1分钟
class HeroNode{
    public int no;
    public String name;
    public String nickname;
    public HeroNode next;
    public HeroNode(int no,String name,String nickname){
        this.no=no;
        this.name=name;
        this.nickname=nickname;
    }

    @Override
    public String toString() {
        return "HeroNode{" +
                "no=" + no +
                ", name='" + name + ''' +
                ", nickname='" + nickname + ''' +
                '}';
    }
}
//定SLL  管理我们的英雄
class SLL{

    private HeroNode head = new HeroNode(0,"",""); //第一个空的,只存下一个节点。
    //add 方法到单向链表
    //不考虑顺序
    public  void add(HeroNode heroNode){
        HeroNode temp =head;
        //遍历
        while (true){
            if (temp.next==null){
                break;
            }
            temp =temp.next;  //只要不为空,就一直往后挪动,直到为空,证明我们找到了尾巴。
        }
        temp.next=heroNode;  //将我们的新节点赋给它即可
    }
    
    //考虑顺序
    ```
public void addByOrder(HeroNode heroNode){
    HeroNode temp = head;
    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=true;
            break;
        }
        temp=temp.next;
    }
    if (flag){
        System.out.printf("准备插入的英雄的编号%d 已经存在,不能加入\n",heroNode.no);
    }else {
        heroNode.next=temp.next;
        temp.next=heroNode;
    }
}

//update

public void update(HeroNode newHeroNode){
    //判断是否为空
    if(head.next==null){
        System.out.println("链表为空");
        return;
    }
    HeroNode temp =head.next;
    boolean flag = false;
    while (true){
        if (temp==null){
            break;
        }
        if (temp.no== newHeroNode.no){
            flag=true;
            break;
        }
        temp=temp.next;
    }

    //根据flag 判断是否找到要修改的节点
    if (flag){
        temp.name= newHeroNode.name;
        temp.nickname= newHeroNode.nickname;
    }else {
        System.out.printf("没有找到编号%d的节点,不能修改\n",newHeroNode.no);
    }


}

//删除

public void del(int no){
    HeroNode temp =head;
    boolean flag = false;
    while (true){
        if (temp.next==null){
            break;
        }
        if (temp.next.no==no){
            flag=true;
            break;
        }
        temp=temp.next;
    }
    if (flag){
        temp.next=temp.next.next;
    }else {
        System.out.printf("要删除的节点%d 不存在\n",no);
    }
}
//显示
public void list(){
    if (head.next==null){
        System.out.println("空");
        return;
    }
    //因为头节点不能动,因此我们需要一个辅助变量来遍历
    HeroNode temp =head.next;
    while (true){
        if (temp==null){
            break;
        }
        //sout
        System.out.println(temp);
        //将tempH后移,一定小心,后移动是为了打印出所有的节点,将下一行注释,会死循环,因为节点不会为空。
        temp = temp.next;
    }
}

}

public class SingleLindedList { public static void main(String[] args) { //测速创建节点 HeroNode hero1 = new HeroNode(1, "松江","及时雨"); HeroNode hero2 = new HeroNode(2, "松2","及时2"); HeroNode hero3 = new HeroNode(3, "松3","及时3"); HeroNode hero4 =new HeroNode(4, "松4","及时4"); SLL sll=new SLL(); sll.add(hero1); sll.add(hero2); sll.add(hero3); sll.add(hero4); sll.list(); } }