00:00
好,下面呢,我写一个方法,这个方法我干脆写到这吧。在这啊,那么我们写一个叫count。Boy啊,编写。啊,叫做编写方法,这个方法呢,我们叫countboy,干什么呢,就是完成这个游戏。完成这个游戏。嗯,我们现在就来开始写啊,第然后can boy这里首先呢,我们要传入三个变量。哦,我们要传三个变量,因为刚才咱们已经分析过来了,就是根据刚才这个分析。啊,他说是要从第几个人开始取啊,第几个人开始数,数几数几个,一共有多少人,我们先把这个写出来。这个变量呢,我们这样写啊,比如说start。No就代表他是从第几个人开始的。然后count number就是数几次,我我不用那个MK啊,那个有时候自己也不知道代表什么含义了,所以说我这写的是count number也是一个,然后呢,还有一个总共有多少人numbers。
01:13
好,同学们看这三个变量,三个变量我再说一下,Start number代表从第几个人开始数。从第几个人。开始数没问题,然后呢,这边counter counter number呢,代表数数几,数几下代表数几下。数。哦,数几下。好数几下,然后呢,这个numbers呢,代表我一共有多少人,其实这个一共多少人呢,这个地方我们也可以不传,因为其实这个地方我们可以做成一个属性传进去也可以的啊,这边是一共多少人,一共多少人。好,这就是我这个三个变量,那先首先先对参数进行一个判断。
02:04
对参数参数进行一个简单判断啊判断我就这样写,首先如果这个first next,它等于空。那说明当前是一个空链表,没有办法玩,就一个人都没有。那肯定就不玩了,还有一种情况就是大number,它如果它小于一了,肯定也不行,因为我们我们不可能是编号,我们从一二开始吧,就是你不能写个负一,从负一我们就没法玩了,还有一个呢,就是我们这个呃,Start number这个编号啊,这个编号它不能大于numbers。啊,他最多等于,他如果大于了,比如说我一共有七个人,你要从第几个人开始数呢?你就从第八个人开始数。那这个就没法玩了,好,我这里做了简单的一个判断,那我就做一个说明,就说什么呢,就说参数有误。参数有误,请重新输入。
03:01
重新。OK,重新输入OK那。下面就不走了,对不对,不走了。好,这是一个简单的参数判断。那下面呢,我们就来分析这个游戏的一个思路了,完成游戏的思路我要分析了啊,游戏的思路呃,我们。我我,我是这样想的,同学们还是老规矩,我们结合这个图来来说明。好,借用这个图来说明,因为这个这个图呢,这个图刚才是我形成的时候画的,这个不好看,我还是看这个图,因为七个人形成过就变成他了,好,我把这个图给大家。拿到这边来,同学们注意听。好,我直接讲到这儿,我把我的思路给大家分析一下啊。好,这边是我要去完成的一个思路,先跟大家聊一聊,就是完成游戏的思路分析,分析完了过后我们再写代码。
04:03
啊,代码后面再写实现代码,因为我如果不把思想给你们说清楚,大家可能会觉得,诶,老师在写什么东西,我不知道,我想我说了啊,这是老师的一个思路,不是说每一个人都是这么去写的,但是结果一定要正确。叫不同的人可能有不同的思路,那有些人说,那老师我就用一个指针也可以。对不对,那我的思路是这样子的,第一步。第一步呢,首先大家知道,当我们这边做完以后,大家心里面要很清楚的知道这边有一个指针,它指向第一个小孩的,知道是哪个指针吗?So first。没问题吧,是不?First先指向第一个人的。因为这里面要涉及到一个删除的问题,就是当你数到一个人,要把他踢出去。你是不是要把它踢出去,而我们这个单向链表有一个最大的问题,它不能自我删除。是不是它不能自动删除,那么我我是这样写的啊,我这样写,我会在这个first后面设计一个,我先第一个在这个first后。
05:10
后边。后他这这这个叫后边嘛,我们假设认为这个叫后边,后后我们设计一个。辅助之争。辅助之争。辅助指针,那其实这个应该叫前面啊,叫前面。叫前啊前面。前面设计一个辅助指针,假设这个指针呢,我们就叫help吧。Help help help就是辅助指针,这个指针呢,它始终在first前面,那到时间我会在这有个指针。当然这个怎么移动到这来,那待会还得说这个事儿啊,这有个指针。Purple per这个子呢,始终是在这个first的后面。要形成这么一个结构。
06:00
然后呢,第二步第二步,然后就开始数数。啊,这个先第一步就是说先把这个her,呃,放到这个first后面去,就是G。及将哪个呢,将这个Harper。Elp,这个这个指针先定位到哪里呢?定位到这个这个first的前边。前面。第二步。移动到将这个first和her,将这个first移动到那个d start number1个人那去,第二步将哪里呢?将这个first指针指针移动到那个大的。Number这个这这这个人能理解是什么,这这个小孩。那这个小孩是哪个小孩我不知道,嗯,那就移,移动的时候呢,假我们假设按照这个设计的啊,假设我们是移动到第四个小孩,这个能理解吧,就是这个第四个,那第四个就这样移动了。
07:09
那就是它它它移动到这来嘛,是不是,那就是说待会儿呢,我要让它移动到这个地方来。移动到这地方来,就第二步要移动到这来,也就相当于待会这个first应该指向它。好,我换一个别的颜色啊,同学们。好。我我换一个别的颜色,这个颜色呢,我们换成这个这个颜色啊,换成这个。这个这个颜色吧,好,它移动到这儿来的时候呢,这个Harper呢。也要跟着移动到这个位置来。诶,好,这样子就相当于赫本始终在他屁股后边,哎,在他前面第三步开始数人了,第三步第三步呢就开始数,因为你先定位到胆囊管,然后开始数数。开始数几个人呢?开始数这个counter number个人。
08:02
个数。那这个时候就相当于说,比如说我们我们这边是数的三,那相当于说这个地方开始数啊数一二。三那也就是说将来这个first呢,就变到了这个位置来。变到这个位置来,当当当然他在动的时候,你这个Harper呢,你是要想办法跟着他屁股后边。这是我的一个算法,我说了可以优化。可以的话,因为这个方法比较好理解,先用到这个方法好移移动到这数数数,注意这个时候first和我们的这个Harper。会相应的移动,会对应的会对应的移动。好。当我们形成这个情况的时候,大家知道这个六号就应该被干掉了。这个六号就应该把你干掉,而实际上确实六号是第一个被干掉的人是吧?哎,而且我们刚才说第六个干掉,那就是第四步,我们要做一个事情,第四步就是删除这个人,删除first指向的。
09:07
指向的这个小孩节点。能理解吧,啊,当然你要删除在这个很简单了,为什么?因为我后面有个辅助节点,是不是我只需要让这个辅助节点这地方指向这个地方不就完事了吗?因为我这样一种。这个六没有人指向了,相当于这个六就被出圈了吗?能理解吧,啊很很简单啊,但你要写的更更干净一点,也可以先把这个first,你你你可以也可以把它那个next织成空啊,但制成空之前呢,你可想把first往后面移动一下啊啊,那这个时候。让这个出圈,出圈你还要注意一个问题啊,你得让这个first还得往前面移动一下,你你才能才能把它干掉,不然的话,待会他也就是现在这个一旦出现了,过后这个first呢,要执行塌了。
10:01
但是你指向它,它仍然是保留一个什么关系的呢?是这个Harper还是在这个first后面对不对,因为你看嘛过来了。好,同学们,思路就写完了。下面自然就是我们的什么呀,代码实现了。这是我的一个思路。但这个思路呢,可能不是最简洁的,但是它是比较好理解的一种思路啊,一种思路,好思路我们有了,我把这个思路给同学们复制粘贴到我们的这个代码部分。好,同学们,那下面呢,老师就开始写这个代码了。就按照刚才的一个套路来把它搞定好,把它搞定好思路分析,我们先结果。
我来说两句