00:00
各位,我们完成第二一种添加英雄的这种方式。那么这种要求呢,我们将根据排名将英雄插入到指定位置,如果有这个排名,排名呢,就说比如说你添加一个人啊,排名是第十名,然后你又添加一个英雄,他的排名还是第十名,怎么办呢?就提示这个错误信息,明白意思吧,好,现在呢,我们先来做一下简单的思路分析,还按这上面来来来分析啊,同学们还以这个来分析。那假如现在我们要来分析这一个,往里面添加,这个就是按照编号的顺序来添加的话,这个应该是怎么来做呢?来,我们把这个表往下面粘贴一份,我们来分析一把。啊,分析一把。往这来来一个啊,来一个,比如说现在呢,这一个第一个这个编号是一,他是第一个英雄人物,这个编号是。
01:07
是这个编号是七,OK,那现在假如我有一个这样的,我有这样一个信息啊,比如现在我们是需要干什么呢?需要。就是刚才我们说需要按照按。按照编号的这个顺序添加。那他的思路应该是什么样的呢?首先我们要找到第一步,首先找到。这个新添加的节点的位置。这个大家能理解吧,你比如说现在我要添加一个英雄人物是。二号。大家想你要添加一个英雄人物是二号,那其实他是应该添加到一号和四号之间的,能理解吗?所以你先要找到这个位置,找到这个位置以后,第二步应该怎么办呢?让这个新的节点的下一个域指向。
02:11
这个节点,那也就是说事先呢,你需要有一个辅助节点,比如说这有一个节点,这个,那这个节点呢,呃,这个指向,比如说我们叫temp。能理解啊,就是temp,那也就是说我们我们找到这个节点是通过什么呢?是通过一个辅助变量。当然也可以叫辅助指针,都都可以指针啊来找的,那一旦找到以后,下一步该干什么事情呢?哎,下一步我们就让这个新的节点。到点next域等于temp.next域大家理解我在说什么吗?那就说因为你这个temp。呃,你这个temp通过temp已经找到了数据二应该加到他们之间的,所以说我让新的节点的点next域指向temp的点next域,那也就是说这条线就会生成。
03:11
是不是这条线就会生成了。明明白这意思吧,然后我们再让再做一件工作,让什么呢?让这个temp.next域指向这个新的节点,那也就是说我们temp.next呢,不要再指向它了,而是指向。这个节点。那你看这样子是不是就相当于我们这个二号。二号这个节点就被插入到了一号和四号之间。就是这么一个简单的思路,明白,那关键是找到这个位置怎么找。后面这两个就是两句话嘛,关键是怎么找到,肯定要通过便利。通过便利来搞定是不是搞定好。同学们思路我已经。
04:02
有了,下面我们代码将其实现来吧。那么我们就在I的后面呢,新加一个方法。好,我们新加一个方法,就是第二种添加英雄的方式,我把这个提示要求拿到这里来。好的,呃,它具体的要求呢,是有这么两点,对不对,是有这么两点,好同学们,我们现在来开始编写这个方法。OK public void I2或者I by order,没问题吧,I by order,那么通过这个呃顺序来走hero node,然后呢,给我来一个he no的节点。这个大家没有没有问题吧,那现在呢,我们要做一个辅助指针,因为这个temp很重要,你没有这个temp指针做一个辅助,你无法找到。适当的位置添加,你也不能动,害呀害的节点,我们刚才已经讲过,绝对不能动,你动了以后便利都便利不到了,明白吧,所以说我们的第二个动作呢,是要干什么呢?因为头节点不能动。
05:12
动,因此因此啊,因此我们仍然仍然通过一个辅助,辅助指针或者辅助变量都可以,好吧,变量变量来来干什么呢?来。找帮助啊,帮助找到找到添加的位置。能理解我的意思吧,好,那现在呢,我们要注意啊,因为这是个单链表,我们这个是单链表。你不能这样去找啊,不是说老师我我找到这个temp找到这个位置,那不行,你其实是要找temp的下一个节点,是不是适合节奏,说你你需要找到是呃,添加这个位置的前一个节点。大家知道我在说什么吗?不然你加不进去,因此还有一点啊,因为是代表因此。
06:05
因此我们找的找的这个temp。是位于位于什么呢?位于这个添加位置的前一个节点,前一个节点,否则你加不进去,否则加入加入不了。加就否则插入不了,插入啊插入呃不了,那么为什么呢?因为你如果temp你是找到找到后一个节点,比如说你这个temp找到这来了。那我问你,你这个二加的进去吗。加不进去,因为你你你如果说这个二是加在这个temp的后面,或者是呃,加在这个temp的前面,你肯定加不进去,因此呢,一定是找的找到这个呃要加入这个位置的前一个节点你才行的,明白这意思吧啊。否则不行的啊,是位于添加位置的前一个节点,否则你加入不了,那现在呢,我们来做这样一个工作啊,来做这样一个工作。
07:09
好,首先我们先把这个temp节点拿到。He nod no,被遇害的。没问题吧,好,首先呢,我们做一个布尔变量不值。我做这个变量的作用是干什么呢?这个是标识。标识就是英雄,就是存就是就是添加的这个编号,编号是否存在,是否存在默认为false,为什么呢?因为大家都知道,如果你添加的这个新的节点,它的编号。已经存在了,那你就不能添加。是不是要要报一个提示信息呀。明白这意思吧,所以说我们这个flag呢,就是干这个事情的,Flag是用来做一个标识的,能理解能理解啊flag。
08:03
好,有了这个东西呢,下面我们接着往下做,我肯定是个Y循环遍历,这个没有什么问题,好怎么样来做呢?如果大家看过代码啊,如果ten不点next。它等于空了。说明什么问题,说明现在temp呢,已经在链表的最后,是不是说明说明temp。已经在链表的最后,这个能理解吧,因为你点next等于空了,那说明它已经到链表最后了,如果到链表最后那就break了,那说明不管你找到还是不找到都要break。你理解我的意思吧,就说这是不管找到还是没有找到,都要break。那相当于说有可能你添加的这个新的节点就应该位于我们现有这个链表的最后,能理解吧,好,否则我们再进行判断。还有一种可能性就是if,如果temp.next.no。
09:00
啊,如果它大于大家看啊hero node.no说明什么问题?因为我们讲过,我们找的这个temp,其实是让temp的下一个节点。跟二比较,你不能让temp本身跟他比较,如果temp本身跟他比较,那你找到这个位置的时候,其实它有可能是添加前面的明白意思吧,那就加不进去了,能理解我的吗?所以说这地方我们要强调一点,就是位置找到了,位置就找到了。哪里呢,就在这个ten的后边。插入。就对了。能理解意思吧,因为temp.next no如果大于点no,那说明什么?说明我这个her load就应该添加到temp和temp.next之间。因为你用是temp的next next的比较,你比如说temp的next等于四,四是不是大于二,大于二吧,大于二是不是就应该加在temp和temp.next之间。
10:03
理解我在说什么吧。建议大家一定要绕过来啊,一定要绕过来好,那这个这个地方一旦找到,那说明我们就位置就找到了,诶就应该插入到temp的,在temp的后面添加好,那我这个地方还就break了。是不是也不了,还有一种情况l if。如果说我们不点next。点no,它就等于hero.no说明什么问题,说明我们这个啊,这是等说明我们这个编号已经存在了,说明想呃,希望添加的这个hero node的编号怎么样,已然存在。那你依然存在,那就意味着我们不能再添加,所以你找到位置,但是不能添加了,那这个时候应该做什么事情呢?首先将这个flag。
11:00
是不是作为一个处说明什么,已经有了。说明。编号存在。编号啊编号存在能理解吧,存在,那这个时候是不是也应该break了。好,如果这三个这几个条件啊,你没有成立,那么是不是意味着还要需要往下移动一下,继续找。那也就是说,假如它不等于空,这个条件也不成立,这个条件也不成立。那是不是应该让这个同步往下移动一下,再看下一个。有没有满足这里面的某个条件,能理解老师在说什么吗?啊,一定要后移啊,后移后移,后移其实就就就相当于在便利我们这个链表当前的链表,理解老师在说什么啊,那么同学们想当我们退出这个while循环过后。当我们退出这个while循环过后,同学们请思考这个地方要不要添加,是不是首先判断flag。
12:02
是不是好,这个时候呢,我们要判断flag的值。Flag的字。Flag的纸。好,那现在我就要写了啊。如果flag它等于真。说这个flag等于帧说明什么,就说不能添加,不能添加,因为编号已经有了,不能添加说明编号存在,是不是这意思啊,存在,那既然存在是不是我们应该提示一句信息啊,就是说待插入的或者叫准备准备插入的这个英雄。哦,英雄。英雄,诶这个啊,英雄的编号多少呢?可以把它打出来。已经存在。已经存在了,不能再添加,是不是就不能不能加入,那么这个时候不能加入,我就可我把这个编号打出来给人家提示一下嘛,就是你要加进的这个东西,确实是我已经有了,不能再加了。
13:06
好,那么一旦这个地方不能添加,那还有一种可能性就是什么呢?Else就是等于就仍然保存一个false,说明是可以添加的是吧,这个时候我们就可以加入了。加入加入到或者插入到,插入到什么呢?链表中哪里temp的后边。对不对,那你要添加temp,后边我们看这个刚才是不是我已经分析过来了,它就两个动作,先让新的节点的next指向temp.next然后再让PU的NEX指向这个新的节点,是不是刚才已经分析过了原因,是不是画了这条线了,那同学们两句话就搞定了,就是hero。就是我们说的这个hero。no.next它应当等于temp next。是不是这句话,同学们,这句话是不是意味着我们这条线?
14:03
就搞定。还有这条线怎么搞定呢?这条线是不是应该通过我们temp.next等于新的这个节点。搞定好同学们。呃,这个地方我们就写完了啊,那这边还有一个小问题,就是这个什么。好,这地方应该是一个加号啊,这个地方我们要这样写的话,是一个格式化,就要把它改成F。试一试吧,改成一个F,好同学们这样子呢,我们就是按照编号来添加的,能理解吧,好同学们,我把这个代码呢,来进行一个简单的测试啊,我们来加入的时候呢,改变一下加入的方式。好,仍然把这句话粘过来。这个时候添加了市场编号啊添加。或者要加入按照编号。编号的顺序能理解好,现在呢,我把这个打开。打开过后,然后呢,我把这个地方改成另外的一个方法叫ADD by order。
15:06
爱的by order。好,现在呢,我把这几个方法的名称都做一个调整。同学们看啊,现在我在加的时候顺序是1423。1423,但是根据刚才我们讲的这个规则,或者我们这个代码的实现,它虽然是1314321423价格,但是最终实际上顺序仍然是一个有序的是1234,能理解运行值跑一个。好,我们看到代码呢,OK的。看到没有第一个。宋江,第二个卢俊义,第三个是吴用,第四个是林冲,那我们来找一个已经存在的啊,比方说我在这地方又做了一个动作,我又加了一个,又把这个删,重新加入了一份,那么我们看有没有提示信息。好,同学们可以看到他在添加的时候呢,说准备添加的英雄人物三号已经存在,不能添加。
16:05
是不是就是这个,因为你无用已经有了呀,好这是可以的啊可以的,好行了,那我把这个删掉,同学们根据刚才这一个代码的实现呢,我们就把根据排名来添加到指定的位置,代码写完了。啊,这个还是很有用的,就是说我们可以在内存里面就把它顺序排好,那这样子呢,我们的效率速度。肯定比直接在数据库里面操作要快,是不是好?那这个第二种方式的添加呢,我就给同学们讲解到这里。讲解到这里。
我来说两句