单向链表(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变量作为方法中的一个判据是一种广泛使用的编程思想。