ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021-06-12

2021-06-12 22:32:29  阅读:162  来源: 互联网

标签:12 Hero temp no heroNode next SingleLinkedList 2021 06


不想学习时怎么办01


今天因为昨晚没有睡好。

再加上最近的运动量有些大,感觉身体有些疲惫,心情也不是很好。

所以不是很想学习,但是又不想荒废时间,于是我就在是浪费时间呢还是去强迫自己去学习这两个方案之间变得很矛盾。

但最后我去学习了,并且很开心地学习了。

记录一下这一次的方法:

看治愈系视频 + 玩开放世界的3A大作

首先我看了一个罗翔老师的事情,老师说过很多的一句话就是“我们的认为唯一确定的就是不确定的人生”。

这让我有了一些自己的感悟,如今我们变得很功利,我们想要收获的越来越多,但问题是,但我们真正地满足了我们的欲望时,我们真的能够感到快乐吗?

这点我深有体会,不能,人类的欲望时无止境的,欲望得到满足迎来我们的不是收敛,而是下一个欲望。

然后我去放松了一会儿,玩了我很久都没有碰过的GTA5,慢慢地体验其中的剧情,慢慢开车,慢慢走路,慢慢甩狙,让自己静下来。

这时候很莫名其妙地我的心情变得好了起来,于是我重新投入到Java算法的学习当中去了。

以下是我今晚学习的一个链表操作,里面包含了对链表的增删改
。大家有兴趣的可以看看,思路和注释我都写在里面了。


package linkedList;

import java.util.zip.CheckedInputStream;

public class singleLinkedListTest {
public static void main(String[] args) {
Hero hero1 = new Hero(01,“宋江”,“及时雨”);
Hero hero2 = new Hero(02,“林冲”,“豹子头”);
Hero hero3 = new Hero(03,“李逵”,“黑旋风”);
Hero hero8 = new Hero(07,“zyq”,“略略略”);
Hero hero6 = new Hero(05,“zyq2号”,“呜呜呜”);
SingleLinkedList SingleLinkedList = new SingleLinkedList();
// SingleLinkedList.addHero(hero1);
// SingleLinkedList.addHero(hero2);
// SingleLinkedList.addHero(hero3);
SingleLinkedList.addByOrder(hero1);
SingleLinkedList.addByOrder(hero2);
SingleLinkedList.addByOrder(hero3);
SingleLinkedList.addByOrder(hero8);
SingleLinkedList.addByOrder(hero6);

    SingleLinkedList.list();
    System.out.println("=========================");
    Hero hero = new Hero(01,"小宋","及时雨~~");
    Hero hero10 = new Hero(10,"小宋","及时雨~~");
    SingleLinkedList.editByOrder(hero);
    SingleLinkedList.editByOrder(hero10);

    SingleLinkedList.deleteByOrder(01);
    SingleLinkedList.deleteByOrder(00007);

    SingleLinkedList.list();
}

}
//定义SingleLinkedList 管理我们的英雄
class SingleLinkedList{
//定义一个头结点,头节点不要动,不存放具体的数据
private Hero head = new Hero(0,"","");
//返回头结点
public Hero getHead(){
return head;
}
//添加节点到单向链表
//思路,当不考虑编号顺序时
//1、找到当前链表的最后节点
//2、将最后这个节点的next,指向新的节点
public void addHero(Hero heroNode){
//定义一个临时变量 存放头结点
Hero temp = head;
//循环判断指针是否指向最后一个节点
while (true){
if(temp.next == null){
break;
}
temp = temp.next;
}
temp.next = heroNode;
}

//第二种方式在添加英雄时,根据排名将英雄插入到指定位置
//(如果有这个排名,则添加失败,并给出提示)
public void addByOrder(Hero heroNode){
    Hero temp = head;
    //1. 判断序号是否已经存在
    boolean flag = false; //默认不存在
    while (true){
        // 排除所有存在的因素
        // 说明链表已经到达最后 该序号并不存在
        // bug01:不能把temp.next == null 放在第temp.next.no > heroNode.no之后
        // 因为这样第一次temp.next就是空 就会报错 no is undefined
        // 第一次要直接跳出
        if(temp.next == null){
            break;
        }
        // 疑惑1 : 为什么只需要temp.next.no > heroNode.no 这个条件就可以判断不存在
        // 解疑  :  因为temp是从head开始的,遍历了每一项 , 只要大于就说明没有等于的
        // 如果没有大于的 说明新添加的序号是最大的 默认说明链表已经达到最后 序号依然不存在
        if(temp.next.no > heroNode.no){
            break;
        }
        else if (temp.next.no == heroNode.no){
            flag = true;
        }
        temp = temp.next;
    }
    if(flag){
        System.out.printf("该序号%d已经存在",heroNode.no);
    }
    else{
        // 新加入的节点后一段为之前temp的后一段
        heroNode.next = temp.next;
        // temp的后一段为新加入的节点
        temp.next = heroNode;
    }
}

//修改节点
public void editByOrder(Hero heroNode){
    Hero temp = head;
    boolean flag = false; //判断节点是否可以修改
    while (true){
        // 没有找到此节点
        // 疑惑1:为什么最开始会执行 temp = temp.next; 这一句
        // 解惑: 因为 内部的确是存在很多个节点的 所以两个if语句都不会执行
        if(temp.next == null){
            break;
        }
        else if(temp.no == heroNode.no){
            flag = true;
            break;
        }
        temp = temp.next;
    }
    if(flag){
        temp.name = heroNode.name;
        temp.foreignName = heroNode.foreignName;
    }
    else{
        System.out.printf("该节点%d不存在\n",heroNode.no);
    }
}

//删除节点
//删除使用的原理是 temp.next = temp.next.next
// 例如 1 4 7 ; temp = 1 那么4是找不到的 java中的内存机制就会默认把不存在的4删除掉
public void deleteByOrder(int no){
    Hero temp = head;
    boolean flag = false;// 判断是否能够删除
    while (true){
        //遍历完后为空 ,没有找到
        if (temp.next == null){
            break;
        }
        else if(temp.next.no == no){
            flag = true;
            break;
        }
        temp = temp.next;
    }
    if(flag){
        temp.next = temp.next.next;
    }
    else{
        System.out.println("没有找到要删除的节点");
    }

}

//打印所有节点
public void list(){
    //判断是否为空
    if(head.next == null){
        System.out.println("链表为空,没哟数据哦");
        return;
    }
    //因为头结点为空 并且不能动 所以我们定义一个辅助节点
    //bug 临时变量应该为头结点的下一个 因为默认头结点是不存放任何数据的
    Hero temp = head.next;
    //循环打印
    while (true){
        //bug2 temp而不是temp.next 那样会错过第一个
        if(temp == null){
            break;
        }
        // 如何显示出来的 调用类节点里面的toString()方法 默认会调用
        System.out.println(temp.toString());
        temp = temp.next;
    }
}

}

//定义一个英雄类
class Hero{
public int no;
public String name;
public String foreignName;
public Hero next;
// 构造器 快捷键 alt + insert
public Hero(int no, String name, String foreignName) {
this.no = no;
this.name = name;
this.foreignName = foreignName;
}

@Override
public String toString() {
    return "Hero{" +
            "no=" + no +
            ", name='" + name + '\'' +
            ", foreignName='" + foreignName + '\'' +
            '}';
}

}

标签:12,Hero,temp,no,heroNode,next,SingleLinkedList,2021,06
来源: https://blog.csdn.net/ZYingQii/article/details/117856358

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有