00:00
好,这节课我们继续来手写啊,子节点的更新啊。呃,那么咱们现在的话,这个L呢,就是都没有匹配啊,都没有匹配到呢,这块还比较难写,所以咱们现在呢,先不写这个都没有匹配到的情况,我们呢来写外结束之后的事情啊,因为外结束之后呢,能够判断出,嗯,咱们刚才PPT上的这种情况。因为这种情况的话,不就结束了吗?就是旧钱超了啊,那咱们看看有没有新节点还遗留在外面对吧,这种节这种情况不是呃很常见吗?就是要插入节点啊,那所以我们现在来看一下,就是插入节点这种情况。现在呃,上边是abcde,然后底下呢也是abcde,然后我们把FG给加上。好,那现在的话是不是就相当于要新增两个节点,好abcd一点要新增两个节点啊,但是现在没有新增上就说明你这是有问题的啊,你这个while结束之后呢,你需要啊,就要继续看看这个它是因为什么啊,有没有剩余的节点,如果剩余的节点呢,它是不是就可能要。
01:12
呃,删除节点或者要新增节点对吧?哎,那所以说我们现在要去查一下啊。查一下好继续看看咱们现在这个。呃,现在这个节点的情况啊,就是继续看看有没有剩的。啊,好,如果循环结束之后呢,我们的老的开始啊,Old start就是老的头小于等于了你老的尾。对吧,就循环结束了,他还比它小。哎,就是循环结束了啊,你这个start还是比O的小。哎,还是比O的小啊,哎,循环结束了,还是比O小啊,那就这样的情况啊,但是这个时候新的是是是谁比谁小。
02:05
啊,就是你是不是后边这个小,所以这咱们现在是拗啊,哎拗。看一看就是你的new start还是要小于你的,嗯,New and window。那这种情况的话,咱们是不是就需要报告还有剩的对吧?哎,还有剩余节点没有处理啊,当然咱们要说一下就是new这里,New这里还有剩余节点没有处理,你看他就爆诶,但是没爆。啊,我你看我再点点一下,注意看点一下没有报。对吧,哎,没有报这个还有剩余啊,没有报这句话这就说明写错了,看看啊啊,这是IDX这块有点太不认真了。好一点,诶他就爆了,那这个时候呢,就说明要插入这些节点,大家能理解吗?插入这些节点的话,怎么插入呢?那我现在是不是就需要寻找一个啊当前的那个节点。
03:02
对吧,哎,就是要看当前的啊这个这个子节点,那所以说咱们现在就可以来一个before啊,看的一个before before是什么呢?就是你新的啊插入的,因为现在要要以哪为插入啊,其他都处理了,接下来是不是要以新钱要进行一个插入,对吧?哎,心钱指向的这个地方来进行一个插入啊,所以这块的话呢,我们就需要让他判断是乘于你啊,心前就是new的N的IDX啊,不是新后啊后边那一个。当他。对吧,但是他有可能是是没有,就这个值可能是没有啊,没有的话,那它就是闹,所以我们就写三元,就看这个节点是不是闹。如果是闹呢?那我们before就是闹。否则呢,就是这个。啊,那咱们现在来输出一下这个笔,这个笔before就是标杆。
04:00
插入的标杆啊好,咱们来一点一点测试一点,诶标杆是now没问题,因为就是要插入在now前头,那这个时候我们就可以调用啊,就是也不是调用吧,就是在这里就可以自己去写这个这个函数。对吧,哎,我在这里就可以自己去写这个函数,那就是给它循环插到这里头。明白吗?哎,就循环插到这里头,那怎么循环插到这里头,是不是就需要用for循环let I等于零对吧,然后I小于什么。啊,小于的是不是,呃,Start I DX。对吧,哎,I或者是I等于star I DX,它要从咱们的开始的这个这个循环节点啊开始循环,那这个是不是new的star I DX对吧?哎,然后到new的N的IDX结束啊,然后小于等于啊,然后I加加。哎,我们都要给他加上,加上的话很简单,那就让parent m,哎,我们就去加上啊加上。
05:07
加上什么呢?就加上这个,呃,我们要把这个节点给它创建,创建上。啊,那这个就是。呃,让他insert before。好插入,插入哪个节点呢?是不是你要去插入一个,先把标杆写上,标杆就是比before啊,标杆就是这个比before。没什么毛病,哎,他是个闹闹的话,就表示在最后啊,那接下来的话,我们就需要看一下这个啊,比较麻烦的就是这个,嗯,你当前这个节点,当前这个节点的话,它需要创建,因为它是新的虚拟节点,所以这块就真的要create了。这块就真的要create element了。明白吗?然后就需要创建你的这个啊new啊new vno啊,不是这是new v not啊。诶,就是你这个大参数。
06:02
啊,New c。对吧,哎,中的D项我们要给它创建出来。啊,然后before放在这儿,好,咱们拭目以待,看一看啊,走,哎,FG就创建出来了啊,那这个now是什么意思?就是inside before,其实now就表示的是大家可能不知道啊,如果是now的话,Insert before可以自动识别now啊insert before方法。可以自动识别这个闹对吧?哎,自动识别这个闹,然后自动识别这个闹的话,如果是闹啊,那么就会自动排到队尾。啊,排到队尾去,就是和a child是一致的。啊啊,Pen child是一致,那你说老师我可不可以判断啊,判断这个比如说可以。可以判断哎,来判断它是不是闹啊,但是这里一定要一定要去写个三元,因为闹是不能打点了。能理解吗?那是不能打点,就用em的em的啊,然后一定记住这里要创建出虚拟节点,就是你的new ch的Di项,现在呢,还没有成为对吧,就是还没有真正的倒模。
07:13
明白吗?所以呢,要调用create element函数对吧?哎,然后给它变为倒模,然后这个这个函数不是会返回吗?还记得吗?咱们之前不是给它改了一个返回em吗?那他就能给它创建出来。所以现在就能把剩的这个新增出来了。明白吧,哎,增增出来了,然后还有一种情况就是便利结束了。啊,但是呢,指针没有变,是不是就是删的情况。对吧,就是左边多右边少,那这种情况呢,它就需要删除,就有剩余项。啊,有剩余项,但是你还要防止死循环,就是abcde,咱们把CD删除啊。哎,删除下载里头,咱们刚才说过了,是不是不会影响它的那个啊,这个G是新增的啊AFG吧,啊G是新增的,那所以说你看一点,它是死循环的,哎,死循环的。
08:06
啊,为什么,因为一定要保证,就是你删除的东西它要在中间,因为咱这else没写,你发现没有这else没写。他还是会有死循环的可能性的。懂吗?哎,所以说咱们现在要把中间剩的你还得给营造出来啊,就是你现在就是你看abbe吧。对吧,哎,我们要把BC删,BCD删除啊,把CD删除,那刚才咱们证明过,如果是在中间的话,那它是能命中三四的,所以这个时候他是不会死循环的。好吧,哎,咱们先把删除这种情况写完。所以你会发现他是讲道理的,就你只要跟着老师写啊,他讲的他不死循环,但是CD没删掉,发现没有CD是没删掉的,但是不死循环呀。为什么?因为所有节点被处理完了,就是说他他没有没有外部循环没有没有结束啊,外部循环没有结束。
09:00
好,那接下来的话,咱们就需要在这写个if。啊,那这块的if呢,它是写else if好呢,还是写if好,那这时候你就想它两者只能必居其一,要么左边完了,要么后边没完,对吧?所以两边不可能都没完,因为都不可能都没完,它循环不会结束。对吧,哎,所以咱们这块呢,就会去写一个else if else if,就是我们要看一下他此时没有啊,就else if。哎,Else if的话呢,那就是咱们的,呃,O的start ids是小于等于O的。N idx的。对吧,那这个时候是不是就可以说O的那部分还没有节点,还有节点没有处理完啊。对吧,那咱们现在点一下应该能输出这句话,果然看见没有,哎,那咱们现在就需要删除了。啊,就需要批量删除啊,Old的start和O的N指针之间的像了,哎,就行了。
10:09
啊,所以这个时候又需要for f等于零。对吧,哎,然后I咱们去小于这个,呃,不是等于零,等于谁呀,等于。嗯,O的star的IDX对吧,然后小于等于O的N的IDX,然后I加加。哎,爱家家。好,然后这时候删掉。删掉的话呢,呃,这个时候就拿父亲的父亲去删就可以了。对吧,哎,删掉啊。这个是。啊的对吧。嗯。哎,Remove,老大。好,我们把这个删掉,删掉的话还需要把它给设成安迪范,还记得吗?是吧,所以这块比较麻烦啊,处理的没事,一会咱们再说,嗯,然后我们就让parent element,我们就remove child。
11:08
对吧,哎删谁呢?嗯,删掉呃,你便利的这一项,那就是O的CH当中的Di项就行了啊应该就能删了,咱们看一下点诶没没没删成啊啊的em吧,对吧。啊,就代码一多就容易乱啊好就删掉了。对吧,删掉了,但是呢,你一定要给他去加上标记啊,就真的删掉了,就删是很简单的,对吧?哎,一定记住要给他加上一个标记,就是告诉他这个虚拟节点,我们给他处理完了。啊,但是处理处理完无所谓,因为你是没有写在file循环里头,就他没处理完,我下次更新的时候,它不是又是一个全新的节点嘛,所以这块倒不用给它设成ID法。好吧,哎,所以说我们现在呢,就把新增和删除写完了,但是呢,一定记住这个删除只能删除内部了啊,如果在后边删了,比如说你把这个E删了,它就会死循环,因为它都没匹配到啊,咱们看一下你看死循环了。
12:10
就是没有命中三四啊,就是三四就是没有命中新前和旧后,还有这个啊,旧前和新后没有没有命中到好吧,哎,所以这样的话,他就是有点问题的。好,那不管怎么样,我们这个视频现在是很成功的啊,我们又把咱们代码呢,递进了两段,把这个if和这个else if咱们就写清楚了。发现了吗?哎,就写的很清楚啊,就是new这边的剩余,还有O的这边剩余,分别对应的是咱们这边啊,就是如果旧键循环完毕,说明新节点中要插入的节点。对吧,就旧节点先循环完毕了,那如果新节点先循环完毕了呢,是不是就说明老这边还有剩余的呀,对吧?哎,好,那咱们视频单独存,然后咱们一会儿再去写啊这个else,那这个else也是咱们所有代码中最后一个了,对吧?哎。
我来说两句