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;
}
}
class SingleLinkedList {
//先初始化头结点
private HeroNode head = new HeroNode(0, "", "");
//定义一个尾结点,用于添加结点
private HeroNode tail = head;
}
public void add(HeroNode heroNode) {
tail.next = heroNode;
tail = heroNode;
}
public void addByOrder(HeroNode heroNode) {
HeroNode temp = head; //temp指向要比较的结点的前一个结点
boolean flag = false; //标志添加的编号是否存在,默认false
//寻找添加位置
while (true) {
if (temp.next == null) {//没找到插入位置,直接插入到链表尾
break;
}
if (temp.next.no > heroNode.no) {//下一个结点no大于插入的no,前一个结点no小于插入的no
break;
} else if (temp.next.no == heroNode.no) {//说明希望添加的heroNode的编号已经存在
flag = true;
}
temp = temp.next;//后移
}
//判断flag的值
if (flag) {//编号存在,不能添加
System.out.printf("准备插入的英雄编号%d 已经存在了,不能加入\n", heroNode.no);
} else {//编号不存在,插入到链表中,temp指针后面
heroNode.next = temp.next;
temp.next = heroNode;
}
}
注意
? 如果链表中已经存在要插入的结点,则不能插入,并给出提示
public void update(HeroNode newHeroNode) {
//判断链表是否为空
if (head.next == null) {
System.out.println("链表为空!");
return;
}
//找到需要修改的结点,根据no编号
//定义遍历指针
HeroNode temp = head;
while (temp != null && temp.no != newHeroNode.no) {
temp = temp.next;
}
if (temp == null) {
System.out.printf("没有找到编号 %d 的结点,不能修改\n", newHeroNode.no);
} else {
temp.name = newHeroNode.name;
temp.nickName = newHeroNode.nickName;
}
}
思路:找到待删除结点的前一个结点,temp指向要比较的结点的前一个位置,所以比较时是,temp.next.no == delNo
public void del(int no) {
//判断链表是否为空
if (head.next == null) {
System.out.println("链表为空!");
return;
}
//定义指针
HeroNode temp = head;
while (temp.next != null && temp.next.no != no) {
temp = temp.next;
}
if (temp.next == null) {//没有找到删除结点,temp就移动到了链尾
System.out.printf("没有找到编号 %d 的结点,不能删除\n", no);
} else {//找到删除结点,temp指向链表中间
temp.next = temp.next.next;
}
}
public void list() {
//先判断链表是否为空
if (head.next == null) {
System.out.println("链表为空");
return;
}
HeroNode temp = head.next;
while (temp != null) {
//输出结点信息
System.out.println(temp);
//将temp后移
temp = temp.next;
}
}
原文:https://www.cnblogs.com/fkPrograming/p/14484370.html