
public class HeroNodeDemo {
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 hero5 = new HeroNode(4, "常毅");
SingledList singledList = new SingledList();
singledList.add(hero1);
singledList.add(hero2);
singledList.add(hero3);
singledList.add(hero4);
singledList.delete(3);
singledList.show();
}
}
/**
* 创建一个管理节点的类
*/
class SingledList {
/**
* 初始化一个头节点,头节点不能储有效数据,因为头节点可以帮助我们确定节点的初始位置
* 因此头节点不能动
*/
HeroNode head = new HeroNode(0, "");
/**
* 定义一个用于添加节点的方法
* @param heroNode
*/
public void add(HeroNode heroNode) {
// 因为头节点不能动,所以设置一个指针节点
HeroNode temp = head;
// 使用循环,遍历到最后一个节点
while (true) {
if (temp.next == null) {
break;
}
temp = temp.next;
}
temp.next = heroNode;
}
/**
* 定义一个用于修改节点的方法,根据节点的编号进行修改,即节点编号不可更改。
*/
public void update(HeroNode heroNode) {
// 定义一个辅助节点
HeroNode temp = head;
// 进行链表是否为空判断
if (head.next == null) {
System.out.println("链表为空");
return;
}
// 表示节点编号是否被找到
boolean flag = false;
// 使用循环去找节点编号
while (true) {
if (temp.no == heroNode.no) {
flag = true;
break;
}
if (temp.next == null) {
break;
}
temp = temp.next;
}
// 如果找到节点,就去修改值
if (flag) {
temp.name = heroNode.name;
} else {
System.out.println("输入有误");
}
}
/**
* 遍历节点的方法
*/
public void show() {
// 通过头节点判断链表是否为空
HeroNode temp = head;
while (true) {
if (temp.next == null) {
break;
}
// 每次输出确保是可以进行输出的
HeroNode heroInfo = temp.next;
System.out.println(heroInfo);
temp = temp.next;
}
}
/**
* 根据节点的编号删除对应的节点
* @param no
*/
public void delete(int no) {
HeroNode temp = head;
while (true) {
if (temp.next == null) {
System.out.println("要删除的节点不存在");
break;
}
if (temp.next.no == no) {
temp.next = temp.next.next;
break;
}
temp = temp.next;
}
}
}
/**
* 每个类实例就是一个节点
*/
class HeroNode {
public int no;
public String name;
public HeroNode next;
public HeroNode(int no, String name) {
this.no = no;
this.name = name;
}
@Override
public String toString() {
return "HeroNode{" +
"no=" + no +
", name='" + name + '\'' +
'}';
}
}

双向链表的添加操作
public void add(HeroNode heroNode) {
// 因为尾节点不能动,所以设置一个指针节点
HeroNode temp = last;
// 新添加节点的前一个节点为temp所在的节点
HeroNode heroNode1 = new HeroNode(heroNode.no, heroNode.name, temp, null);
// 进行判断若链表中只有一个元素,则将first指针指向该元素
if (last == null) {
first = heroNode1;
} else {
// 如果存在元素,就将元素追加到链表后面
temp.next = heroNode1;
}
// 进行指针后移
last = heroNode1;
}



















