修改节点的信息
步骤
- 通过遍历找到该节点,
- 对应信息进行更换和修改
代码实现
public void update(HeroNode heroNode){
HeroNode temp = head;
boolean isFlag = false;
while (true){
if(temp.HeroNO == heroNode.HeroNO){
isFlag = true;
break;
}
if(temp.next == null){
break;
}
temp = temp.next;
}
if(isFlag){
temp.HeroNIckName = heroNode.HeroNIckName;
temp.HeroName = heroNode.HeroName;
}else{
System.out.println("未找到所要修改的元素");
}
}
注:都用到了遍历,不同的是判断是否为尾节点的语句所放位置不同。按顺序添加的遍历语句中用到temp.next所以判定语句在遍历的开头,防止出现空指针。但是这里是判断是否存在该节点,遍历语句有两个出口,头一个是找到对应的节点,break退出。然后才是找不到,遍历了所有元素,直到最后一个元素,跳出循环。
删除单链表信息
思路
- 找到待删除节点的前一个结点
- temp.next = temp.next.next
- 被删除的节点将不会有其他引用指向,被垃圾回收机制回收
代码实现
public void delete(int HeroNo){
//找到对删除节点的前一个结点
//temp.next = temp.next.next
//被删除节点没有任何引用,被垃圾回收机制删除
HeroNode temp = head;
boolean isFlag = false;
while (true){
//这里如果我把判断是否为尾节点语句放在第一个,尾节点会不会跳过判定阶段。
//如果我不放到第一个会不会出现空指针异常
//答:并不会,因为倒数第二个,验证的就是最后一个
if(temp.next == null){
break;
}
if(temp.next.HeroNO == HeroNo){
isFlag = true;
break;
}
temp = temp.next;
}
if(isFlag){
temp.next = temp.next.next;
}else{
System.out.println("未找到你要删除的节点");
}
}
链表小结:
- 链表是以节点的方式来存储的,是链式存储
- 每一个节点包含data域和next域,next域指向下一个节点
- 链表的各个节点不一定是连续存储的,内存地址不像顺序存储,地址不是相邻的
- 链表分为带头节点和不带头结点两种,根据实际需要确定
一日所学
- 尾部添加,不按顺序
- 中部添加,按照排名进行添加
- 修改节点信息
- 删除节点
主要方式
- 头节点不可动,遍历数组的方式,辅助变量
- 单向链表一条路走到底,没有回头路