00:00
下面呢,我们来整一个这个删除,现在你可以不停的往里面加了哈,我们刚才只加了一只猫,那可以加很多只猫,比如说我们,呃,多来几只猫吧,看看它能不能。都列举出来第二只猫。第二只猫呢,比如它的编号为二,是汤姆二,我就复制粘贴。好,第三第二只猫,第三只猫。第第三只猫啊,第三只猫是汤姆山,我就四个亿对不对,这个呢,没有关系,好加三只猫。好,第一只猫,第二只猫,第三只猫,我们看看三只猫是不是都已经放到这个列表里面去了,欢新的。划线电表我们可以看到呢,三只猫是的确可以的啊,第一只猫IDE它指向了下一只猫,第二只猫可以的,没问题。嗯,那么怎么删除这个猫呢?现在大家想象啊。我们现在要把一个猫删掉,从环形里面删掉,就跟刚才我们说有一个数数,数到那个地方要把它干掉,从环形里面干掉,好家伙,这个地方怎么做?现在假设已经已已经有三只猫了啊,第一只猫,第二只猫,我们先来画个示意图。
01:11
这是第二只猫。好,比如说汤姆二,注意听,还有呢,第三只猫。它是单向的。第三只猫来了。好,第三只猫是汤姆山。好,他们现在的关系是这样子的,哎,第二只猫,第二只猫指向了第三只猫,第三只猫指向了第一只猫,形成一个环状。形成一个环状。现在我们想删除第二只猫。怎么删呢?你首先要删的时候,大家知道它是一个单向的。它虽然是环性,但是但是是单向的,你想你想删掉第二只猫,你必须有一个辅助节点在这个节点上。
02:01
对,就是说你必须要有一个辅助节点在这个节点上,而且头节点你还,你还要考虑有可能把头节点给干掉了。也有可能把头机脸都干掉。如果你把这个头节点干掉的话,你原先那个头节点还要重新返回值。像Java有些语言不存在这个问题,但是构语言有个有这样一个问题,就说你把它删掉过后,这个投进有有可能被删掉。所以说这个地方呢,我们要考虑的东西很多,我们一定来写来吧,现在呢,我们来讲一个删除一个节点。删除啊。三除。删除什么呢?删除一只猫。删除一只猫,OK,这个写的写的要动动脑筋了啊写脑筋,那么我们function,然后呢,我写一个叫delete。D列是什么呢?好,原先是inser的一个insert的一只猫,现在就是删除一只猫。Delete一个猫,首先呢,你得先给我这个头节点,害的这个头节点你得给我啊心。
03:07
Kid。No,挺好,然后呢。给我一个ID址。就是这个猫的ID吧,ID in好,然后我现在呢。叫去,诶这写错了,叫d delete啊,什么叫删除delete d delete好,现在我们要去删除它。那删除的时候呢,这个思路应该怎么走比较合理呢?比较合理呢,首先我们要这样子做啊,先找一个辅助,先找这个temp,这个temp呢,我们先让它指向head,这个这个temp我们先让他知道,然后呢,我我做一个辅助节点有个helper。这个helper呢,我让他呃,先指向这个这个temp的这个节点,就是helper。
04:03
这个是一个另外一个帮助节点,上来过后,先让他指到这个最后这个节点。那为什么要这么做呢?这样子有个好处,就是我让这个temp比比较,说老师你以前不是temp往前面比较一下就可以了吗?是的,但是现在的问题是,这个头节点本身就有值。你不能说不去比较它,你原先之所以可以做到让臀补去让你比较这个ID是跟temp的下一个节点比较,是因为你原先头一年本身是没有值的,它可以不参与比较。而你现在这个臀部呢,它是有值的,所以你上来过就得比。那假设比方打个比方,最极端的例子啊,你删掉的就是NUMBER1怎么办?你根本就把它干不掉。大家想是不是道理?比如说我删掉毛衣,就他现在你害掉指向它,特别指向他,你你来把它删掉试试看。
05:03
你怎么删掉它,它是单向的,那你必须有一个节点刚好是在它的屁股后边,也就是说这个节点有点类似于我们单向。那个列表的那个temp了。他就说这个家伙往前面走一下,你跟着往屁股后面追一下,发现哦,你是他,然后我通过他把前面那个干掉。他的逻辑是这样子的啊,大家可能听起来有点晕。但是呢,没有办法,数据结构就这样子的。对,那么我们的思路是这样子的啊,注意听删除一只猫的思路是删除一个环形,环形单向单向链表的,这个思路如下。当然我是说的我的思路啊,同学们可能呢,咱们班有些同学还是有一些新的想法,这个也可以,反正只要把它干掉就行。我的思路第一点是先让。先让这个先让temp指向。
06:02
这个had没有问题,第二个第二个第二个就是说我新建一个helper。EL elp,我定一个hyper这个指针,让它指向的是上来过后,先让它指向这个我们这个环形链表的最后,因为现在的投机点我们还是有的,所以说呢,像让什么呢,让。让这个,让这个Harper指向。指向哪里呢?指向这个环形链表。环形链表的最后。好,然后就让思路是让temp跟这个要删除ID比较,如果发现有了。就让这个黑想办法干掉他。他是不是这样子的。然后干什么呢?让让碰这个节点,因为害的节点是不能动的。害,这个节点不能乱动。
07:00
因为你一旦动的话,你外面这个一旦把head的节点动的话,外面都找不到。啊,当然有人都说是外面,其实你这害得害得动的话,害得动的话,其实理论上还影响不到,只是你害的能改变它的词会影响。因为你hide它是它仍然是你你你你到站里面这个这个headde,这和主站的hide和里面的hide还不是同一个headde,只是他们之间的空间是同一个,只要你不改变它,其实你这边害的怎么变化都影响不到外面这个害的。大家知道我在说什么吧?就说你这个headde啊,你这个hide和里面这个delete里面用的这个hide,它的名词相同,但是它是不同的变量。他们仅仅是仅仅是指向同一个这个空间而已,也就是说相当于这样一种感觉。你这还有个害的,是主战也有害的。最近这句话啊,这句话有点不好理解。当然当然你听懂了就很就很开心了,说你现在其实是这样子的,你有一个head指向它,我也有个head指向他,这是主站的he。
08:08
大家这个应该是可以接受的。可以接受的,这个是主站的he的,这个是你那个现在我们要删除的这个函数里面的那个占与害的。删除那个那个删除了一个那个节点,那个还那个那个那个函数方法的还的好,他们两个害的呢,其实都指向这个地方而已。所以说你这个害,即使跑了,你这你这个害啊,即使即使你走了,其实我这个外面还是只用它明白这意思吧。没有动,但是呢,你千万不要用这个head去改变里面的值,就你head,比如说我通过这面headde把这个地方吃空了,那你就完蛋,说老师我我把吃空了,你如果里面的head把它吃空了,你外外面的head也也找不到纸了,所以说你你就记住这个原则。但是里面还有一个比较麻烦的事情。就是将来如果把这个节点删掉了,就你在这个,你在这个high,你在整个这个这个害的这个delete路里面,把这个点掉就麻烦了。
09:09
如果你要删除的事情节点本身。那这个就。没地方了,所以说这地方还有个事,就什么事呢,就是你删除的时候要把要重新返回一个hi的指针才行。所以说我们接着往下走,思路啊,让谁最近待会一点来吧,让temp让和这个什么呢,和这个要删除的,要删除的ID进行比较。进行比较。如果相同了。如果相同,则通过谁通过helper完成删除。完成删除,但是要考虑一个情况。考虑就是删除的如果是头节点怎么办,但是这里面有个逻辑,一个很重要,这里有一个特别重要逻辑,这里必须考虑考虑如果删除的就是头节点怎么办。
10:11
头节点怎么办?好,要考虑一个好,那么现在呢,我们大致的思路已经有了啊,那先写着吧,写到哪儿我们再去分析,好写到哪再去分析啊来。现在跟上老师思路,首先我让一个temp指向这个head。然后呢,让这个her也指向这个head,这个我就不不解释了,同学们。好,然后呢,我们让head指向对做一个判断,如果它是一个空的,它本身就是一个就是一个空节点,这个就不不去玩了,这个比较简单,如果head就是temp.next本身就是一个空的,这个比较简单啊,等于空。如果它等于空的话,我们就不要做处理。
11:01
啊,这就不要做处理,就说一句话,Print。艾伦说,这是一个空链表,无法删除。这是。这是一个空的什么玩意儿?这是一个空的环形链表。环形列表无法删除。不能删除,好直接退出。因为你空的列表,你往下面走啊,很麻烦。很麻烦,所以说诶说老师你这个怎么这么难呢?哦呃,是这样子的,这个hier我写错了是吗。Hi use啊,他是没有用过,那待会会用的啊,Hi,是付给他的,为什么没用过?Hier,他说是哦,他应该是Harper,没用过。Her没用过,呃,那待会再说啊,他应该说her没用过。果然没用过,待会再用啊。好,接着往下看。这是空链表的情况。这是一个空链表,那么还有一个情况呢,就是大家得考虑。
12:03
呃,大家你你要考虑一个情况,就是假设这个地方就只有一个节点。他的情况还。就假设这里面就一个节点,你还得想这个节点,因为环形链表啊。你走的话,这个考虑东西很多,所以说我们再考虑一个特殊情况,假设你就一个只有一个节点,那么这个也也也好处理,那就这样写了。嗯,这个呢,老师就先跟他说啊,如果只有只有一个节点怎么办呢?那就判断一下,如果这样子啊,If我们的temp.next。他刚刚就等于这个hide。说明什么?说明目前你的环系列表只有一个节点。只有。一个只有一个节点,那如果只有一个节点怎么办呢?那就简单了,大家看,麻烦这个事儿只有一个节点,你想一想啊。
13:00
怎么把它删除。这个地方就回到刚才老师那个逻辑了,他假设就只有一个节点。他只有一个节点的话,我问大家一个问题,同学们,请同学们思考一个问题,如果说真的只有一个节点,是不是我们从理论上,理论上说,只要把这个头节点的那个next自空就完了。是不是这个道理,我只要把吃空就行了,也就是说其实这个地方就做一件事情,Temp。点next等于near。这就完事了。因为你想嘛,你你只有一个节点的话,其实他就自己指向自己,那那这就完事了,好这个就完蛋了,就就OK了啊,这就完事了。接着再往下,但这个做完了过后也也也不往下走了,这就OK了,已经。不走了,下面下面最麻烦的事情,它是有两个以上的节点啊,两个以上的节点,这里面是有一个错误,看看啊,少了一个等号。
14:00
好,下面的情况就是我们真正的环形了,因为空链表和只有一个节点,比较麻烦,不好处理,现在呢,我们把这两个情况出完了,处理完了之后我们看如果啊。好,现在我们开始走这个逻辑了,哪个逻辑就是刚才老师写的这个逻辑,好不着急啊,同学们,这个呢,本身稍微有点麻烦啊,如果同学们有更好的解法,也可以拿出来分享一下,好,我现在这样子啊,如果有两个以上两个包含。包含。包含两个以上的啊,两个。两个哎,两个以上的以上的节点。好两个以上的节点,那么啊,我们就怎么样呢,我们就按照刚才的这个思路来搞定它。啊,就按这个思路来搞定它。好,来了啊,那就这样子for循环。For循环开始玩了,怎么搞定呢?
15:02
就跟我们以前那个逻辑一样。就跟以前那个逻辑一样。首先如果。如果他找啊找找找,因为现在直接让temp来比较的,所以说你就直接写如果temp。点。Next。等于害,这说明我们已经找到了。最后。但是还没有比较,就是现在如果是耐temp.ne等于head了,那说明我整个转了一圈,到哪来了呢?我的temp到这来了,我真跑这来了。对,我都撑不到这来了,那如果在这种情况下还没有找到,说明我已经比较到最后一个,就是还没有比较最后一个啊,就说已经到最后一个了,还没有找到。就说就说大家如果到这一步。到这了就说明就说明什么呢?说明我已经已经比较到最后一个。最后一个,但还没比较,最后一个,最后一个还没来得及比较啊,最后一个还没比较,最后一个还没有比较。
16:06
还没有比较都还没找到。还没比较。好,说明这个时候呢,那这个就我就我就准备退出了,因为这个地方再不退出没有机会退了。如果你再不退的话,你只能再往前面一走,而你前面那个开曾经比较过一次,因为你上来先比较着头,如果你再去比较一次,你就不划算了。你退出的时候就不好控制这个,所以说先退出当然最最出这句话,最后还没有比较,我退出再比较,当然那如果在这个情况下等到它,等于它这个说明箱是最没必要,那么还有一个情况。就是在这个过程中,我比较的时候找到了。还有一种情况就是if。什么呢?Temp就是temp点。它的这个no就等于了。你要输进来的ID,就说这个情况是代表你的ID和我现在这个要找的人刚好就找到,说明我现在找到他了。
17:07
那说明什么?诶,宫崎找到了。那找的时候,我要删除的就是痛。那这个时候找到我也退出。因为我要在后面去干掉他,但我也可以在这直接删除啊,但我也可以在这处理,我也可以在这处理,我们也可以在这直接删除,我们,我们也可以这里直接干掉,直接删除。那问题是你怎么知道你上来就能看到呢?因为整个流程这个temp在不停的移动。好,注意,你这个移动还不行,你的helper还跟着往往下走。说老师这hier到底是干嘛的呢?告诉大家,没有黑ER,你干不掉他。你看就说这个在不停的移动。下移,呃,再再移动,而你这个黑ER呢,也在移动,那黑ER移动的价值,它们两个价值不一样。
18:04
这个地方的移动是在于他去进行比较。它是用用来比较到底是不是要删除这个,而这个地方的移动式,它一旦找到过黑,就用它来干掉这个temp。而它的价值在于什么?它的价值在于。价值在于价值。一旦。一旦我们找到了这个temp,就是说删除的一个节点,一旦一旦找到了,一旦找到要删除的,删除的这个节点。OK,那么这个temp补就能发挥巨大作用,如果没有哦,没有,没有这个黑,你就干不掉它,因为我们是单向的。意味着单项,就意味着你要找到的这个被删除节点前面那个标识那个节点必须要有用好,一旦有这个东西,那么这个就跑起来了,跑起来过后呢,在这假设找到我们就删除它,怎么删除?非常简单,一句话是就搞定了啊,这么干也就说假设我们找到了啊,同学们看你们想怎么找,比如说我在不停的这个移动中,我发现temp要上去,就它。
19:07
当然你你在比如删除就是二号,那么这个helper呢,其实也跟着移动为下,因为根据刚才我们逻辑大家都在走,那么继续说你的help呢,目前应该指向的是这个节点。好,那就说你的temp指向是这个节点。而her只用这个点,那这个要被干掉,显然非常的轻松,一句话就能干掉他。点next指向temp.next一句话搞定。好说老师。点next。等于。ten.next。那你想想这个道理是不是样的,her.next就是它的点,Next指向temp.next不是它就指向他了吗?就这根线,就这根线就指向到了这。好行,这那你看这个环形列表就这样子的NUMBER1只用它它。
20:04
指向它循环。这个列表就被。扔扔扔出去了。把这个解就扔出去了。好,大家看是不是这个道理。是不是这个道理,就是说干部等于零,那等于这个ID,那么就把他干掉,干干掉了啊干掉了,那我这打出一句话啊,说谁谁谁被干掉了。但这个也可以,到时可以可以那个可以可以显示出来啊,就是说某某被干掉了用户,比如说这个猫猫猫猫ID等于多少的猫猫干掉了呢?其实就是一只猫猫。干掉了。好的,但是这里面还有一个逻辑,很麻烦,你这样写还有一个问题。就是你看啊,不停的找,不停的找,不停找有一个情况。有一个情况就是。你找到这儿了?就是你在不停的找的过程中,你你们有没有发现,当假设我们一直没找到啊,就我回到这个地方来,回到刚才那个逻辑来,假设我们这个temp不停的找,找找找找到这了。
21:09
找到这个地方了。找到这的地方时候,找到地方我们发现,呃,他下一个已经到头节点了,说明这个这个条件已经满足,我我已经跑出去了,就说现在他不停找,找到最后这一点,我发现我还没找到,还没找到我就退出来了,那说明你最后这一个呢,还没有比较,你还得你还得来一把才行。但有同学老师我把这个逻辑写到这里面,可不可以这个呢?我也在想哈,我也想了一这我没有想到一个特别好的方法,同学们也可以想一想,我的逻辑就比较直接一点,就说因为你在这个地方比较的时候,虽然到hide了,但是你这个temp本身还没有比较,你就跑了,所以说这面还要进行最后一次比较,这里这里还要比较一次,这里还要还有还要比较一次机会。还要比较一次,那比较一次,呃,有一个问题就是说假设里面已经删掉过了,说明绝对不是,就最后这个这个temp,最后这个节点肯定不是,所以说我们加一个加一个flag。
22:09
FLY,假设呢,我给他一个处,我给他一个处,诶什么意思呢,就说我们认为他在这个过程中就能删除。就能删除,那么一旦他一就说就说在这个过程中,假设force吧,就是我们认为他们啊,就认为他删除过。就是我将来还要比较一次啊,但是因为你在这里面真正删除了一次,所以说把它制成一个force。就说明哎,你你外面不要不要再去再再去玩了,我已经我已经在里面删掉过了,所以说这边我就判断一下,如果这个flag。它就等于处,那说明什么呢?说明你在整个这个便利过程中根本就没有删除它,那就意味着我最后还得比一次,如果你在里面删除过一次,好,咱们就不用再删除了,因为我们保证ID不重复。那如果保证ID,如果你ID还是重复的,就更麻烦了啊。
23:03
那你想的很多,所以说你看做数据库的那些人,他底层他写的东西很多啊,所以说我们这呢,可以看到好,还有比较意思,如果他为这个针,如果啊。如果flag保持为真。弗莱维珍。为针,注意听。为真,则则我们我们可以肯定是在负循环,这里面没有删除过,在上面没有没有删除,那么这就意味着我们最后还要比较一次,哎,还要比较一次,好,怎么比较呢?很简单。If temp,它的这个no如果等于了ID。好,它的temp等于ID,那么这个时候呢,说明最后这个要被删除掉啊,就是这个要被删除谁呢。就是最后这个人,这个人删除的逻辑呢,跟前面是一样的哦,那这个就是相当于把这个粘过来就行了。诶,然后呢,你说猫猫谁被删掉了,在这儿写一遍。
24:03
就可以了啊,所以删掉好这个删除完了过后呢,还要考虑一个特别恐怖的一个问题。什么恐怖的问题呢?这里面有一个麻烦事,特别麻烦。大家看啊,这里面有一个麻烦事是,如果我们删除的是头节点。你删除头节点,只有在这个地方才有可能删除头节点,这个地方因为是尾节点,所以这这好办一点,也就说你如果是有一种可能性,你删除就是头节点,你想这个会出现一个什么情况,你们知道吗?如果我删除一个头几点啊,假设我上来过后,我真的就把头几点删除了。假设上来过后,Temp就等于他。对。Harper呢?指向的是他。好结果,一上来一比较痛苦,就是要被干掉的人。好,然后你做了一件什么事情呢,你就做了这么一件事情,你做了一件这么事情,你说诶好吧,然后根据你刚才业务逻辑。
25:07
Harper.next.next那也就是说你现在一做就做了一件这样一些事情啊,同学们注意听。你做了一件什么事情呢?打开它,就相当于让这个her,让next指它的指向它。好,各位同学。你看我们的面变成什么德行了?头节点还是它,那这个地方它已经不是环形了,那就意味着你的这个真正的头节点要指向这个节点。要指向它的下一个节点。因为你上次就是投机人啊。那这样子的话,就意味着如果你删除的头节点,那么你你要做一个判断,如果是头节点,你得让这个,你得让这个,你原先这个投点往这边移动一下。所以说里面还有一个非常重要的一个判断,不然的话就跑不起来。
26:01
那老师这个这这么麻烦哈,可能我这思考的有点麻烦啊,可能有些同学有更简单方法啊啊。好,我们先这样做着啊,大家不用特特别害怕这个事情啊,不用特别害怕啊,有可能会有更简洁的方式,有简洁方式我们到时候再再再再再再来跟大家分享一下就行了,算算法很多啊,那我这加一个判断就行了。加个什么判断呢,我就加这么一个判断,如果。如果你删除的这个temp刚好就等于had。就是你的temp就刚好等于head,说明我们删除的是头节点。说明删除的,删除的是头节点。那么如果删除头节点的话呢,各位同学,呃,下面这个代码还是一样一样的,还是就是这个该怎么做还是怎么做,只是呢,你这个头节点要发生一个修改,就是你这个害呢要变化。
27:01
你的亥的变化,走,你要让他指向自己的下一个节点。你先要你先要做这个工作。你先要做,也就是说当他是头颈点的时候,你你在这这个地方呢,你这个头颈点也就指向了他。好,那你这边再指向你这边,再让它指向这个手,大家看这仍然是一个有效的一个。列表。但是这样做又出大问题了。你原先你原先这个。你主在那个害的还傻傻的指到这儿的呢。你主张指到这,因为你在最后你在便利的时候,你还是用主张这个害的呀,说这个主张进去他跑他他就跑,诶我跑这来跑这来跑这来,实际上他这个就是一个很怪的一个逻辑了,对不对,因为你他他相当于说他这走一圈,这样走了一圈。那他找不到他自己了,因为你你你在进行便利的时候,你怎么停下来的。
28:04
你是不是因为你在找,最后这个时候你等于是偷技能,结果他永远找不到偷技能,这已经是个死循环。一定是个死循环,那就意味着我们还要做件事情,就最后一步了,大家不要害怕啊,最后一点点了啊,周老师你老说最后一点点啊,最后把这个节点返回去就可以了。没问题,你这样做诶那就简单了,最后咱们这个头几年最后可能被改变,那么你就做一件事情,最后把不管怎么样啊。把这个新的节点给它返回去,不是新的节点啊,把这个把这个改过的节点再返回去,你那边你那边接收过,把它改一下就完事了。这个代码就写完了,但是这个地方呢,因为你这写没有没有返回值,所以说这方也也没办法,你得你得简单的把它返回,当然这个地方是没有改过的啊,但是也要返回,因为从语法上是需要的,代码写完了。我都不知道能不能运行起来啊,我都不知道运行能不能运行起来。
29:03
还有哪几位问题?是同步的呀。必须同步。不是,你看啊,也不是这样子的,这个helpper我上来过后先把,嗨,哎,Harper没有找到它的位置吗?我看看。哦,我这还有个问题啊,哈特我没有动过呀,诶,对不起啊,对,刚才有一个重大的失误,其实我一直我一直在做这个事儿,但是我忘了写了这儿,对,刚才呃,我们发现了一个小问题,说hyper指向环形里面,最后是不是这个工作没做,诶诶,对对对对对,非常好啊,非常好非常好。非常的OK,那现在我们就说一下最后这个事情,就是来的过程上这个hyper,呃,到这个地方,我们因为这这这些地方跟hyper没有什么关系,就说空节点,空链表和最后这个这个节表都不需要跟hyper有关系,现在呢,我们在这个地方做一个工作定义压位。将。
30:01
将hyper。将hyper放置到或者定位到,定位到什么呢?定位到我们这个。关系列表的最后定位到链表最后。啊,这个当然很简单哈。所以最后那一个负循环就搞定。怎么写呢?就是如果happen。如果hyper h EL hyper.next它就等于了这个投进点,说明我已经到到最后了,对不对,等于这个投进点。对,非常好,那如果到这儿呢,我就break。Break,否则呢,我将这个hyper不停的。不停的往后走,1p.next。好。还有哪个地方?第几行?96号。Happy。
31:03
移动。一旦找到了三锥节点。我看看这个地方有什么问题吗?Break退出,这上面对哦,这有个break,这还有少了一个break。诶,做完这个事情我就break了。做完这个事情就F了吗?下面这个还有break吗?这个不需要break啊,这个不能break啊,这个就是他不停的走的break。还有什么问题没有?行。全靠你了。我们来试一下,好试一下吧,这个不知道行不行,我们先整一个小小安全,安全第一的啊,现在加了一个,先加一个用户,看看他能不能干掉他。好,先先加一个用户,现在看看先加一个用户啊,先加了一个猫猫,然后里面还有代码有些小问题,呃,把它整理一下。
32:04
好,这个地方它包包没有用过,没有用过倒问题还不大。先一个个删啊,要确保它正正确性好,呃,我们现在呢先跑一下,目前呢有一只猫猫,有一只猫猫好对的,先把它干掉。好,那么现在呢,我们删除一下。调用我们刚才写的这个。K node OK。Kindno。然后呢,我把这个这个头给它放进去。然后我要删除的假设是假设找一个没有删除的,我这我这找一个现在没有删除过,我们再提示一句话,诶没有找到,没有提示好像还。没有找到,还没提示,呃,那就是flag这个地方没有找到,没有找到应该给他一个提示说没有删除对不对,好,这边会删除一次,呃,这边会删除一次,如果两次都掉是吧。
33:04
FS。就是else也不对,因为else它是删过一次的啊。False。哪个地方可以提示他没有三道呢?好,我们来想一想啊。但不low的。第一。而这地方也有可能被有机会删掉。有机会删掉。这个加还不行是吧。哦对对对,是这样子的,就说这个地方说明一次被删掉这个地方,如果说呃,在这个地方就可以确定了,没错,这方可以确定,就真的一次都没机会,因为他这么删掉我不会进来,说明他没删掉,这里面又没有比对过一次,那就真的没有删掉过了。是这个逻辑,好,这边写到就说对不起没有这个猫猫,对不起啊,对不起没有这只猫,没有没有ID啊,或者number等于的这只猫,ID等于这个的猫。
34:07
好,我们把书出来看一下啊,不着急。好的,同学们。写个N,然后呢,我们把这个猫猫打出来就是ID嘛,ID我看是不是ID是ID,呃,然后呢,这个地方我们就可以来一个百分D。好,现在玩一把,诶还有在吗?有错误。呃,这个地方还有一个小错误。哦,没写完没写完,那假设我们删除的是一只不存在的猫,删死,我们看看代码能不能走到那个地方去啊,能不能走到那个地方去还是个问题。好玩一把。看代码能不能跑起来。加入到环形列表,他说这个环形表情况是,但是没有输出,没有输出这个说明代码还是有问题的。
35:01
没有问题的。嗯。哦,我是不是删除,我在删除。呃,来分析一下这里面的代码,刚才呢,出现这个问题,出现这个问题啊,我们看看是原因是什么呢?就是害的你三个字头颈连,有可能会导致头颈帘发生变化,所以说呢,这个地方没有做处理,就是形成了刚才我说的这个死循环。刚才我们已经分析出来了,就是你这没有纸箱,它是这样子啪啪啪啪啪转,那找不到这个投机点了,死了。啊,死了正确。再走一个。好的。好,看第一个猫猫一,删除一个猫猫一,还有一个猫猫二,正确正确啊,我们再来测一下啊,再测稳当一点,删除最后这个节点三我们删一个删一个,删除一个三这个节点看看里面有几只猫,应该还有一号猫哦,三号猫没打开。
36:12
如果这样删除的话呢,我们这个环形链表里面有一号猫和二号猫啊,三号猫被干掉了,来走一下同学们。好,看看道理是不是样子的。好,删掉三号,删掉三号,GOGOGOOK。少猫猫三被删掉了,但是我们刚才还有一个问题啊,就是它这提示的猫猫三被干掉是正确的,对吧,但是这句话好像刚才还是没有走通。是没走通吧。好,我们来写一个不存在的猫。这个猫应该是不存在的,他应该进到这里面才对,说对不起,没有什么什么猫,然后呢,仍然输出123。如果这个代码走通了,就说明那应该是OK了。好的,看最后这个有没有过啊。
37:01
哎,对不起,没有,那说明这个代码现在应该是通过了,就说呃,前期这个写的时候呢,就是有几个小的细节咱们没有注意到,但是在分析的时候啊,我其实都是分析出来了,只是只在写的时候呢,因为这个细节过多啊,有些问题的地方就忘了写了,但是同学们看到确实考虑的东西比较多,那么我给大家一个任务了啊,就是明天呢。你们,呃,有个事情啊,我先说把这个先就是关于这个单向链表啊,单向环形链表的这个内容呢,先给大家介绍到这里。
我来说两句