单链表的修改:
思路分析:
1.先找到该节点,通过遍历节点的编号。
2.修改相应的数据
代码实现:
//修改节点的功能
public void updateNode(HeroNode newHeroNode){
//首先判断链表是否为空
if (head.next == null){//链表为空
System.out.println("链表为空~");
return;
}
//找到需要修改的节点,根据节点编号no
//首先需要定义一个辅助变量
HeroNode temp = head.next;
boolean flag = false ; //flag表示能否找到需要修改的节点,false代表不能
while (true){
if (temp == null){ //表示遍历链表到最后,也没有找需要修改的节点
break;
}
if (temp.no == newHeroNode.no){ //表示找到对应的编号
flag = true;
break;
}
//还没找到, 需要将temp后移
temp = temp.next;
}
if (flag){ //表示找到对应的编号
temp.name = newHeroNode.name;
temp.nickname = newHeroNode.nickname;
}else{ //表示没找到对应编号
System.out.printf("编号为%d的节点未找到,不能修改",newHeroNode.no);
}
}
测试一下:
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, "花和尚", "鲁智深");
//创建链表:
singleLinkedList singleLinkedList = new singleLinkedList();
//添加节点到链表中
// singleLinkedList.add(hero1);
// singleLinkedList.add(hero2);
// singleLinkedList.add(hero3);
// singleLinkedList.add(hero4);
//按照排名顺序插入节点
singleLinkedList.addByOrder(hero2);
singleLinkedList.addByOrder(hero1);
singleLinkedList.addByOrder(hero4);
singleLinkedList.addByOrder(hero3);
System.out.println("遍历修改链表之前的情况:");
singleLinkedList.list();
HeroNode newHeroNode = new HeroNode(2, "卢sir", "玉麒麟~~");
singleLinkedList.updateNode(newHeroNode);
System.out.println("修改链表之后的情况:======");
singleLinkedList.list();
}
}
单链表的删除操作:
思路分析示意图:
从单链表删除一个节点的思路:
1.找到需要删除节点的前一个节点,需要借助辅助变量实现temp
2.删除节点:temp.next = temp.next.next;
3.被删除的节点将会被垃圾回收机制处理。
代码实现:
//删除节点功能
public void del(int no){
if (head.next == null){
System.out.println("链表为空~");
return;
}
//定义一个辅助变量
HeroNode temp = head;
boolean flag = false; //flag代表是否找到要删除的节点
while (true){
if (temp.next == null){ //到链表最后,都没有找到要删除的节点
break;
}
if (temp.next.no == no){
flag= true;
break;
}
//temp后移
temp = temp.next;
}
if (flag) { //找到要删除的节点
temp.next = temp.next.next;
}else {
System.out.println("要删除的节点不存在!无法删除");
}
}
测试一下:
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, "花和尚", "鲁智深");
//创建链表:
singleLinkedList singleLinkedList = new singleLinkedList();
//添加节点到链表中
// singleLinkedList.add(hero1);
// singleLinkedList.add(hero2);
// singleLinkedList.add(hero3);
// singleLinkedList.add(hero4);
//按照排名顺序插入节点
singleLinkedList.addByOrder(hero2);
singleLinkedList.addByOrder(hero1);
singleLinkedList.addByOrder(hero4);
singleLinkedList.addByOrder(hero3);
System.out.println("遍历修改链表之前的情况:");
singleLinkedList.list();
HeroNode newHeroNode = new HeroNode(2, "卢sir", "玉麒麟~~");
singleLinkedList.updateNode(newHeroNode);
System.out.println("修改链表之后的情况:======");
singleLinkedList.list();
singleLinkedList.del(2);
singleLinkedList.del(1);
singleLinkedList.del(4);
System.out.println("删除链表之后的情况:======");
singleLinkedList.list();
}
}