介绍
1.链表是有序的列表,但是链表在内存中是分散存储的
2.可以根据实际需求决定是否带头节点head
应用实例
使用带head头指针的单向链表实现-水浒英雄排行榜管理
1.完成对英雄人物的增删改查操作
2.第一种方法在添加英雄时,直接添加到链表的尾部
3.第二种方式在添加英雄时,根据排名将英雄插入到指定位置(如果有这个排名,则添加失败)
添加(创建)
1.先创建一个head头节点,作用就是表示单链表的头
2.后面我们每添加一个节点,就直接加入到链表的最后
遍历
代码实现
package demo;
public class SingleLinkedListDemo {
public static void main(String[] args) {
HeroNode hero1 = new HeroNode(1,"宋江","及时雨");
HeroNode hero2 = new HeroNode(2,"卢俊义","玉麒麟");
HeroNode hero3 = new HeroNode(3,"吴用","智多星");
HeroNode hero4 = new HeroNode(4,"林冲","豹子头");
HeroNode newHero3 = new HeroNode(3,"wuyong","zhiduoxing");
HeroNode newHero5 = new HeroNode(5,"鲁智深","和尚");
SingleLinkedList singleLinkedList = new SingleLinkedList();
singleLinkedList.addByOrder(hero2);
singleLinkedList.addByOrder(hero3);
singleLinkedList.addByOrder(hero1);
singleLinkedList.addByOrder(hero4);
System.out.println("修改前遍历============");
singleLinkedList.list();
singleLinkedList.update(newHero3);
singleLinkedList.update(newHero5);
System.out.println("修改后遍历===============");
singleLinkedList.list();
singleLinkedList.delete(1);
System.out.println("删除后遍历");
singleLinkedList.list();
}
}
class SingleLinkedList{
private HeroNode head = new HeroNode(0, "", "");
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.println("编号已经存在,不能加入了");
}else {
heroNode.next = temp.next;
temp.next = heroNode;
}
}
public void update(HeroNode heroNode){
HeroNode temp = head;
boolean flag = false;
if (temp.next == null){
System.out.println("链表为空,直接添加节点:"+heroNode.no);
temp.next = heroNode;
return;
}
while(true){
if (temp == null){
break;
}
if (temp.no == heroNode.no){
flag = true;
break;
}
temp = temp.next;
}
if (flag){
temp.name = heroNode.name;
temp.nickName = heroNode.nickName;
} else {
System.out.println("链表中不存在节点,直接按排名添加节点");
addByOrder(heroNode);
}
}
public void delete(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;
System.out.println("删除成功");
}else {
System.out.println("当前链表中没有找到排名为"+no+"的好汉");
}
}
public void list(){
if (head.next == null){
System.out.println("链表为空");
return;
}
HeroNode temp = head;
while(true){
if (temp.next == null){
break;
}
System.out.println(temp.next);
temp = temp.next;
}
}
}
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 + '\'' +
'}';
}
}