数据结构与算法(三)——单向链表

162 阅读1分钟

单向链表(SingleLinkedList)

业务需求

存储水浒传英雄的排名列表,要求存储时按照排名顺序存储,与添加顺序无关。

  • 定义链表节点对象
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;
    }
}

每一个HeroNode对象都有一个next属性指向单向链表的下一个元素。

  • 定义单向链表
class SingleLl{
    public SingleLl() {
        head=new HeroNode(0,"","");
    }
    private HeroNode head;

定义一个head属性并在构造方法中初始化来访问链表。

重点内容

  • 链表的head不能发生改变,在遍历链表时应使用一个辅助变量temp,将head赋值给temp。
  • 由于是单向链表,在对链表进行增删改查时,temp访问的都应该是目标元素的前一个元素。

根据英雄排名来添加元素

 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.println("英雄编号+"+heroNode.no+"已经存在");
        }else{
            heroNode.next=temp.next;
            temp.next=heroNode;
        }
    }

采用布尔类型的Flag变量作为方法中的一个判据是一种广泛使用的编程思想。

源码参照github仓库链接