单向链表的删除和修改节点的信息

修改节点的信息

步骤
  1. 通过遍历找到该节点,
  2. 对应信息进行更换和修改
代码实现
 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退出。然后才是找不到,遍历了所有元素,直到最后一个元素,跳出循环。

删除单链表信息

思路
  1. 找到待删除节点的前一个结点
  2. temp.next = temp.next.next
  3. 被删除的节点将不会有其他引用指向,被垃圾回收机制回收
代码实现
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("未找到你要删除的节点");
    }
}
链表小结:
  1. 链表是以节点的方式来存储的,是链式存储
  2. 每一个节点包含data域和next域,next域指向下一个节点
  3. 链表的各个节点不一定是连续存储的,内存地址不像顺序存储,地址不是相邻的
  4. 链表分为带头节点和不带头结点两种,根据实际需要确定

一日所学

  1. 尾部添加,不按顺序
  2. 中部添加,按照排名进行添加
  3. 修改节点信息
  4. 删除节点

主要方式

  1. 头节点不可动,遍历数组的方式,辅助变量
  2. 单向链表一条路走到底,没有回头路
发布了19 篇原创文章 · 获赞 3 · 访问量 630

猜你喜欢

转载自blog.csdn.net/Blackoutdragon/article/details/103756784