单链表的应用实例
使用带head头的单向链表实现——水浒英雄排行榜管理
1>完成对人物的增删改查操作
2>第一种方法在添加英雄时,直接添加到链表的尾部
3>第二种方法在添加英雄时,根据排名将英雄插入到指定位置
(如果有这个排名,则添加失败,并给出提示)
单链表的创建(添加)示意图
head节点:
a.不存放数据
b.作用就是链表的头
publicint no; public String name; public String nickName; public HeroNode next;
思路分析:
添加(创建)
1>先创建一个head头结点,作用是表示单链表的头
2>后面我们每添加一个节点,就直接添加到链表的最后
遍历
通过一个辅助变量,帮助遍历整个链表
代码实现
//定义一个HeroNode,每个HeroNode就是一个节点
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;
}
//为了显示方便我们重写toString方法
public String toString() {
return "HeroNode [no="+no+",name="+name+",nickName="+nickName+"]";
}
//定义SingleLinkedList来管理我们的英雄
class SingleLinkedList{
//先初始化一个头结点,头结点不能移动!不存放具体数据
private HeroNode head = new HeroNode(0,"","");
//添加节点到单向链表
public void add(HeroNode hero) {
//因为头结点不能移动,我们需要一个辅助变量
HeroNode temp = head;
//遍历链表,找到最后
while(true) {
//当next为null的时候为最后
if(temp.next == null) {
break;
}
temp = temp.next;
}
//退出while时就是在最后了
temp.next = hero;
}
//显示链表(遍历)
public void list() {
//判断是否为空
if(head.next ==null) {
System.out.println("空");
return;
}
//因为头结点不能动,需要一个辅助变量
HeroNode temp = head.next;
while(true) {
if(temp == null) {
break;
}
//输出节点信息
System.out.println(temp);
//将temp后移,一定小心
temp = temp.next;
}
}
}
}
注意添加链表部分
1.找到最后节点
2.将最后的节点next指向该节点
//添加节点到单向链表
public void add(HeroNode hero) {
//因为头结点不能移动,我们需要一个辅助变量
HeroNode temp = head;
//遍历链表,找到最后
while(true) {
//当next为null的时候为最后
if(temp.next == null) {
break;
}
temp = temp.next;
}
//退出while时就是在最后了
temp.next = hero;
}
南故笙烟:单链表按顺序插入节点zhuanlan.zhihu.com