00:00
好,我们就差最后一个else了啊,就差最后一个else了,其实除了这个else之外呢,它其实除了四种命中,还有别的就是这个节点已经处理过了啊,就然后咱们一会再去加加这个else呢,就指的是什么呢?就这种四种啊,就四种命中啊,都没有都没有命中。啊,都没有命中。哎,都没有命中的话呢,那他怎么办呢?你看啊,就是我们现在呢,他这个呃,一上来就可以营营营造,比如说你abcde,然后你这一上来来个QQQ。对吧,一上来就来个QQQ,那这个时候就死循环了,因为他四种都命中不了啊,你甭管什么新前旧前新后旧后啊,还有什么新后旧前新了了,那个新新新前旧后新后旧前都都没有,都命中不了。啊,那么都命中不了的时候呢,这个时候他就会死循环啊,我们冒着这个极大的风险,诶,他已经不出来了,他已经死循环了啊,我们冒着极大的风险点一下,咱们看一下死循环啊,它就死循环了,对吧。
01:08
对,那么这个时候呢,实际上我们要干什么,就是我们先不让他死循环啊,就为了让他不不死循环,这个时候指针是必须要去移动的。对吧,这一点咱们大家是能够,这点咱们大家是能够,呃,能够听懂的,就是不管怎么样,指针是一定要移动的。啊,所以我们这个时候呢,只要让news代尔塔IDX对吧,哎,只要加加上啊,那这个时候呢,它就起起码不死循环了,但是呢,你那个页面也不会变。咱们来看啊一点对吧,哎对吧,哎,页面也不会变,但是起码就没了啊,那起码就没了,那这个时候的话,你后边的节点呢,已经把删掉了,因为你这是QQQ,他发现abcde都都没了,就都删掉了啊,但是QQ没有插入进去。
02:01
那这个时候我们怎么样把QQ插入进去呢?它比较麻烦在哪呢?麻烦就麻烦在这个标杆,你要怎么找。啊,标杆你要怎么找,哎,那它的。源码咱们可以看一下啊,他的这个源码当中呢,寻找这个标杆呢,特别特别的巧啊,老师呢,看的这块代码呢,啊就这个I哎是拍案叫绝,就这段代码啊拍案叫绝。这段为什么拍案叫绝呢?因为他这块为了有一个最大的寻找效率啊,他呢就把这个,诶他就把这个。啊,创建了一个叫做缓存的key。啊,缓存的key叫create key to o的IDX啊,那这个缓存的key干什么的呢?非常简单,它就是把从开始idx到结束IDX对吧,当中的所有的这个key。啊,所有的这个key,诶都干嘛了呢?对都进行便利,然后存存到这个map中。
03:03
让map中的这K等于它的下标I这项。所以这个特别巧,那他提了一个函数,这个函数其实没必要提,咱们就在这里啊,就在这里就是寻找,寻找这个key的map。哎,做这个key的map,然后这个kid map只需要做一次就行,所以你在这里写一个叫key map啊,等于一个,这个等于一个。对象吧。啊,相当于是个缓存。所以什么意思呢,就相当于如果key map啊,他没有key map,现在你还没有key map呢。对吧,那我这个时候就需要便利,便利什么呢?从start开始。啊,就是这块的话叫create key to old I DX。对吧。哎,Create key to这个idx,我要从这个开始,从这个,嗯,你开始的这个idx,那开始的这个idx是谁?
04:01
啊,那是不是就是老的,因为老的这边是没有没有命中啊,所以说你要从老的开始。哎,然后I要小于等于老的N的IDX,然后I加加好,然后你需要把每一个东西呢,你都需要存进去。哎,这个时候你都需要把每一个东西咱们都给它存进去啊,存进去的话呢,就是嗯,我们要把它这个key啊,当然这个key很有可能是安迪范,所以我们先去拿出来啊,那这个就是它的这个呃,O的。O的CH中的Di项的,嗯,Key,然后咱们先判断一下,就如果说这个key不是安迪版的对吧?哎,那么这个时候文章map中的这个key等于Di项。啊,这个过程就是我要去做一个map,一个映射,那这map是什么,我们来看一下。我们来输出看一下。
05:01
好,Map是什么,我看一下啊,我们点击一下,哎,这个时候啊,他说map is no DeFine key map啊,这是key map。好,再来点击一下,哎,这就有了啊,诶,并没有啊,这是a of now78行。啊哦,这个key是有问题吗?这个key等于我要key map,如果非key map。啊,如果非K,那我现在还需要先把这个key map等于一个空对象对吧。好,这回就有了,是不是就是A是零,B是一,C是二,D是三,E是四啊。看见没有,哎,那这个A0B1C2,第三是什么?对,就是咱们在老的这个当中,每个人的那个序号,A是在第零项,B是在第一项,C是在下标为二的项,B是在下标为三的项,E呢是在下标为四的项。是这样子的对吧,哎,意识为下标为四的下。
06:00
那所以说我们现在呢,现在我们就需要干什么,现在我们就需要把这个,哎,现在我们就需要去寻找,对吧,有了这个key map,那我接下来不就是没命中的这项吗?我就要处理没命项,没命中的这项啊,然后他在哪里,我们要去寻找它。对吧,哎,所以说我们现在去找啊,寻找当前啊这个这项啊,当前这项指的是新的就是new start I DX啊这项对吧?哎,这项在。咱们key map中的位置啊,中的这个啊,映射的这个位置序号。对吧,哎,这样子的。啊,这个非它就只有只只只弄一次啊,那这个时候的话,我们是不是就能得到一个值啊,然后这个值呢,咱们就管它叫做啊Co叫idx in old。哎,然后呢,咱们就可以把这个key key map对吧?哎,方括号谁呢,是不是就是你当前的start的这个me notde的key呀,哎,就行了。
07:11
啊,那这样的话你就能寻找到,那我们现在就能输出这一项。对吧,就找看看能不能匹配上,那这一项的话,现在咱们看一下我一点是不是会输出安迪范的,因为你这一项是没有的。能明白吗?那比如说我这里来个CC是不是就会有,对吧,我写个CCCCC就会有,你看我一点哎C它就会有,大家能理解吗。对吧,所以他这时候就会寻找到一个二,因为你这个C被找到了。所以这个时候呢,又是一个if,就是我们要去看这个时候的情况。大家能理解对吧?哎,就是说这一项在这,那么那么现在要判断就是如果idx in o的它是安迪范的,就表示它是全新的项,它是不是只需要插入就可以了呀,啊,所以就idx in o的如果是安迪范的啊,它就是全新的项,那否则的话就是如果不是安迪范的,那是不是就表示的是要移动。
08:12
啊,表示不是全新的项,而是要什么呀,要移动对吧?哎,那就对应着什么呢?就对应着我们这个abcde,你这里有个C对吧,它不是全新的项,就要移动。啊,那咱们现在先把移动写了吧,因为移动感觉更复杂,咱们现在这个C要进行一个移动。啊,就是这个C绝对不是全新创建的,它是要移动过去的。能理解吧,哎,移动过去咱们一会可以用这个叫丑八怪判断法呀,可以来判断呀,对吧?哎,那咱们现在先把这个移动写了啊,移动的话肯定也需要去。嗯,想一想移动是不是也需要排斥,对他也需要排斥,因为你防止这一项和这一项有问题,所以咱们先给他存出来啊,这一项呢,就叫做哪一个元素要被移动呢,那就是老的当中的。
09:01
老的当中的这个这一项要被移动。对吧,哎,要被移动啊,先把这个移动这项给它存出来。啊,然后存出来之后呢,我们这时候又要干嘛?对我们是不是要判断他的这个选择器跟他那个选择器是不是一样。啊,因为一样的话,就是他也有可能不一样。啊,但是咱们最好就就移动不不做那么复杂的判断了啊,就是阉割版,哎,那咱们现在就可以去排斥一下,你肯定要对比你不是不是你肯定要排斥下,万一它内容改变了呢。对吧,哎,内容改变了,所以我们现在就需要把erm to move这一项。啊,就当前你的这一项和你你指针中的这个nova的这个这个东西,哎,我们给他加入排一下。对老的这项跟他排一下啊,老的在前,新的在后啊,千万不要写反啊,写反不对排斥一下就行啊,那这个意思是什么呢?就表示他真的字能改了,你看啊,我下一点诶啊对不起,它是全删了,我看看。
10:03
CC啊,哦对,你还没移动呢,对吧,你少了移动,那你先PAPA之后要移动。对吧,我肯定要移动啊,但是我还要打标记,就是把这项设置为安迪办的,对吧?哎,就表示我已经处理完这项了,那么你前头是不是就要加一个全新的if,就是if要盖一个楼啊,就是表示你如果遇见的这项是处理完的。对吧,我遇见就就我走着走着遇见一个安迪的,我遇见了一个安迪范的,那这项我是不是就应该给他打上标记。啊,然后我就不处理它了。对吧,哎,所以说就相当于什么呢?就相当于这一块啊,就要设置为安迪办的,比如说我要处理完这项了。那我就要在O的CH上为什么是old的,咱们之前PPT上不是一直是old的嘛,对吧?哎,那么就是I DX in o的这一项啊,我们就给它设置成安迪法的就可以了。啊,然后移动,哎,移动就是调用inser的,大家一定注意啊,这是移动,调用iner的before也可以实现移动,哎,也可以实现移动啊,可以实现移动,那这个时候我们就可以让pirate的。
11:12
Parent的这个element,我们就可以insert before移动,移动谁呢?是不是就移动element to move。对吧,哎,就这个警察的提出来的这项啊,然后移动到哪里,对就移动到,嗯,诶移动到我想错了,不是移动到ids in o啊。是是移动到所有的是O的IDX指针,之前咱们刚才不是说过吗?就如果说你便利到一项没有,当然PPT上一直没写,那如果都没有运动就叫用循环来查找了,对吧?但是此时我们并没有真正用循环,是不是用了一个map啊,这样的话能非常快速的找到了,就不用拼了命的在循环了。对吧,哎,然后插入到什么呀,是不是移动到移动到咱们的old start这个idx之前呀。
12:02
能理解吗?哎,移动到这个old star的IDX之前。真的是这样,所以这样的话,我们在这儿是不是就要把它移动到O的start I DX之呃。啊,就差最后了啊,咱们这个心不要浮躁,不要浮躁啊,咱们还是慢慢写beno的应该就对了,咱们看一下啊点诶可以了,这个CD挪了,但是呢,他报错,他说第一项不是node,第一项不是no element to move哦,是不是element to move很有可能。是没有对吧,哦的IDX。拍一下。就这一项很有可能没有啊,那所以说咱们现在判断一下,就是如果element to move是存在,哎。好,然后我们再去给他。啊,弄出来1.a,但还是报错。啊,还是报错,他说你第一项,第一项不是第一项不是节点idx in o的。
13:04
那咱们就判断一下它是不是节点不就完了吗?Type node node value对吧?Noe type等于等于一,它是节点啊,哎,这回就好了啊,但是他并没有移动啊,他应该是把这个C给进行一个移动,这个C和这个C应该移动上,不应该删掉。对吧,哎,不应该删掉啊,那不应该删掉的话,是因为我没有加else if。是因为我这没有加l if懂了吧,因为他就首先应该判断,不是首先不是判断咱们那个1234命中。明白吗?不是判断1234这个命中啊,而是要略过就是已经加安迪范标记的了,就是已经加安迪范的标记的东西,哎,所以这块应该先加上,就如果old start的veno的啊,是now。那这个时候就略过,这个是必须要加的,那我这个时候就要让old start的这个vno就等于old的CH当中,我们要让这个指针后移啊,Start I DX。
14:07
哎,对吧,因为我这个像是闹了啊,我老的头是闹了,那我就让他的后移掠过去,那这种情况的话,还有可能发生另外三种。我们都写上,就只要你遇见and发啊,那就是old and,如果是weno的是no。啊,那我现在是不是就要让这个N的,就要让这个old的,这是old吧,对吧,我们现在就需要减减。这是OLDN的IDX。好,然后else if,我们再抄一下,把这个复制过来,给它换成new,就如果新的是now,那么新的这个呢,就应该等于新的。佳佳。好,这是老的减减。新的。这块容易乱啊。我们就要让这个新的。
15:01
啊,是的。对吧,哎,就应该等于它减减啊,加加减减应该没问题啊,然后这块是else if这块再去比较。L if啊,好,这回就应该对了。就相当于他又略过,因为略过那块是安迪办呀,他就找不到这项了。啊,然后咱们这回来看一下点诶。但起码然后是不是应该还有一个或者安迪就这项,如果是安迪范的。啊,就这一项,如果说已经被标记为安范了,就是虚拟节点中的old。恩,高的的。嗯,他这是old start,就是虚拟节点中的the old start I DX这一项。已经等于安迪范的了。对吧,哎,这个咱们也加上啊。好,这块咱们也加上。加上加上。
16:01
好,然后这是O的end。啊,然后这个是拗。这个是new star的atx。对吧,哎,然后这是拗,这是拗。End idx。哎,New ends,所以这end啊,这个抱歉,这刚才写错了,Start end start end,对吧,New new new new啊这样的。对吧,哎这样写,然后咱们再看一下点,诶看一下这个他还是把那个C给删了啊,他C删了的话,是因为他认为这个C没被处理,其实这个C不应该删。对吧,咱们明眼一看,这个C不应该删啊。这个C不应该删,那就说明这块还是写错了。这块是命中吧,我们alert一个一啊。刷新没谈没谈的话什么意思呀。它不是全新的项啊,它应该是有这项啊。Idx in o的,我们看一下这块输出的是什么,点一下是不是输出二弹出一了啊。
17:04
弹注意了就说明他进来了,进来之后呢,然后我们一项一项去检查吧。不知道哪有错。这是力啊,那就说明这个力没错,需要被移动,这是对的,然后它的no type等于等于一。No的type这写错了,哎,真不认真是吧,哎,然后再点好到这啊。No type等于等于一,那我现在把它给印出来,No type等于等于一,试试看啊走。嗯。弄的太棒。Note type是节点类型吧?啊,太不认真了,是不是em的是吧?哎,太不认真了啊,是em是它的节点类型等于一啊这个时候再点,哎,这回对了。啊,他的接待内容是等于一。音色,Before。他说第一项不是。所以说是要移的这一项的em吧,是不是就这错了。啊,那怪不得咱们现在测试了半天。
18:01
诶。这一项,Old star beno。Old的的吧。是吧,哎走,哎呀,这回终于对了,CCCC对了是吧,然后de,但是还留着,因为de它没有继续往下走。啊,所以这块还是有点毛病,把这个if语句也删了,不用写了啊,因为咱们刚才一报错,哎,这个D又又又那个了啊,说明咱们这个指针是不是在瞎动。啊,这块确实比较复杂啊,咱们这块有一句说一句确实比较复杂,所以千万这个指针动是对的。哦,咱们没改new start那个be not对吧?哎,咱们光让指针动不不行。我还得让他,哎呀。这块有点太不认真了啊,因为快结束了,就有点浮躁,不要有点浮躁,所以这个指针还是要下移的啊,指疑心的。哎,新的头啊,为什么咱们PPT上刚才已经讲过了啊,就说你没命中,你是以这边为基准找他对吧。
19:08
好,那这样的话看看就对了吧,哎,哎呀,Elm of and,这是什么呀?OLDI的第项。嗯,剩余,那等于说底下这块又报错了old的爱,难道这个old的爱咱们这块再判断一下,因为它OLDI可能没有。对吧,O的C,然后判断一下吧,就是因为他可能没有了啊,就各种什么错,看一下这回啊,哎,这回对了。看见了吗?哎,就真的对了啊,所以有的时候他有一些小错,你就判断一下他也,但是确实不知道他是哪卡住了。啊,那咱们现在你看把它从C改成C,咱们用丑八怪验证法来验证一下,他是不是真的没有删。好吧,注意看丑八怪啊,注意看丑八怪,丑八怪验证法来了,注意看点丑八怪是不是还在。
20:01
看见了吗?丑八怪还在,就说明咱们的这个算法跟真实的那个底层是一致的了啊,非常高兴非常高兴啊,就是咱们现在这个算法已经真的能判断这个节点,如果就是移动位置了,那么他不会盲目的给它删掉,创建新的啊,而是会啊,真正的把它给进行一个移动而已。明白了吗?哎,移动就是这样子的。好吧,哎,所以这块是非常非常的。非常非常的一个正确。啊,这块是非常非常的一个正确啊,就是这样子的。啊,但是这些IF1定要写,因为你这些if服不写的话,他会重复处呃处理安迪范的,咱们不信的话,你把这些if服删掉,咱们来看一下一点你看啊,就是它会重复处理氨基半,就相当于虽然你现在感觉没什么变化,但是咱们这个B,比如说这个C,它会处理两次啊,就比如说连续两项什么的,所以这些一定要加上啊,加上。
21:00
好,当你路过安迪范的时候会怎么样,对吧?哎,就OK了。所以现在的话呢,这个地方就真的写完了啊,这个就是全新的想要移动,所以这个移动也就移动成功了,这块也对,这块也对啊,这个安迪办的也对,然后这块也对,移动就真的成功了,ABC。对吧,哎,那现在的话混混的移动是不怕的啊,就现在咱们只要是项不新增,你怎么混都不会死循环啊,你不信咱们打赌吧,你看怎么混就你怎么混,只要不新增啊,那一定不会死循环,咱们看一看一定不会啊,咱们来看走,你看不会吧。对吧,哎,有这个自信啊,因为咱这写完了,但是你一新增废了明白了,你新增废了啊,比如说你现在新增一个Q。哎,你新增一个Q那就废了,立刻就死循环了啊,也不会死循环,就说这个Q啊Q你看现在是不是加的位置不对呀。对吧,为什么这个Q能被加进去,因为这个Q被加进去,是这被加进去了。啊,是这被加进去了。对吧,哎,所以说要加项。
22:02
啊,因为你这个Q处理之后要要加上安迪范的呀,你不加上安迪范的,这里是不是又给你重新处处理了,重新处理了一下,这个是要删下啊,咱们写上要删除项。对吧,哎,所以这块要处理,那接下来就要写这个if了啊,就要加项。哎,这也是咱们所有代码的最后一行了,很激动啊,很激动,写完了咱们就结束了啊好了,那咱们就是parent的elm,我们是不是要加项,就要把你现在的嗯呃,要加的这项,但是现在比较麻烦的就是要加的这项,现在还没不是盗墓还是虚拟盗墓,明白吗?哎,被加入的像啊现在呢。被加入的项就是被new start啊IDX就是newno的这项。啊,就是牛逼弄的对象,但是他是不是还还不是还不是什么呀,还不是节点,还不是真正的盗墓节点,明白吗?还不是真正盗墓节点,所以说我们现在需要给它创建出来。
23:08
啊,创建出来,创建出来什么就是new start idv的这项。然后给它找个标杆儿。对吧?哎,标杆是不是就是你的old start的那个bno的em就行,这回不要忘记写em啊,刚才这块非常抱歉大家忘写em了啊,这回就OK了,咱们看看这个Q能不能加进去,诶,OK了,这个Q加进去了ebacq啊,那这个Q能不能在上面家咱们看一看啊,如果加进去了就说明对了,哎,ebqacd1.ebqacddc对吧。哎,太太高兴了啊,那么咱们就可以说明咱们的最小量更新算法就写完了啊,最小量更新算法就写完了啊,然后这块咱们就把注释补补,就是从old的star I DX开始,到咱们old的N的IDX结束啊,然后咱们现在去。
24:02
呃,去创建咱们这个key map,哎创建key map啊,就是咱们这个一个映射对象啊,这样的话咱们速度快就不用真正的循环了,但这块不是也循环,但这块循环循环的key对吧?哎,就不用真正的去循环了。啊,寻找k map,这个这个这个这个kid map啊,或者不叫寻找k map,就是制作制作kid map啊,一个映射对象,这样就不用每次都便利老对象了,对吧,你你比如说你现在遇见了啊,就是在这个新项当中,你遇见了一个项,比如说这项是个新的。对吧,这项是个新的,当然这个是便利结束之后加的这两项啊,这个de是便利结束之后加的这两项,咱们现在还需要具备两种情况,就是这个de是不是可能在中间加。就他不是在便利结束之后加的。这个de它不是在便利结束之后加的,它不是靠那种四判断便历结束加的,这中间加的,那这个时候这个这个这两项它是不是就该怎么样对他找D的时候,他不能再去变利D,找E的时候不能再去变利E。
25:14
那这样是不是就乱死了?大家能理解了吗?就乱死了?对吧,就乱死了,所以这个时候我们就给它起一个缓存的这么一个对象就特别好。好吧,哎,起一个缓存的对象就特别好啊,那么这个的话,大包就真的最下量更新能够实现了,真的能够实现了啊,真的能够实现了,就是比如说我们现在把ul改成OL,哎,那你知道了,他俩不是同一个节点,那现在是不是内部的节点就会全删掉,新的会全上来对吧?哎,真的你不信的话,你把这个A。设成丑八怪对吧,丑八怪好了一点,你看这个A是不是还是全新上述的。他不是一流丑八怪,这跟咱们死拿包的是一致的对吧?哎,一致的啊好了啊OK,但是咱们现在这个东西呢,还是有点问题,比如说这里头东西是创建不出来的。
26:04
啊,就是咱们现在这个派函数是没有写,不是派函数没写全,是咱们这个create element没写没写全。哎,Create element这里头是少内容的,比如说你现在这个A标签的at tr,它是有问题的,你看我点击之后,我在这里要做一个A标签。啊,我在这里要做一个A标签。哎,然后props咱们现在是不能识别的,能理解吧,那你说老师你加上,哎,你同学们如果有兴趣可以自己加上和瑞属性。对吧,www.163.com。啊。哎,这个AA你看1.a标签看见没有,它的P属性都上不去。啊,那和瑞F属性上不去的原因是因为你create element的时候,你是不是应该便利他的data数组,然后把他的data的这个像prop摘出来,然后每一个人用set atribute,是不是用set attribute把这个her往上写呀。
27:00
对吧,哎,就相当于你这里还是有一个更新的空间的啊,你需要把这个节点上述之前把这个创建出来啊,是这样子的。哎,但是呢,咱们就啊不做了,不做这个,因为咱们现在就是阉割版的一个他啊,但是最小量更新的一个思路已经讲明白了啊,最小的更新,那咱们可以试试把K去掉,把K去掉是一样的,因为把K去掉的话,它全都能判断A命中对吧?头跟头相同啊,你看头跟头相同。这能理解吗?对吧,你把key去掉的话,那。如果你能听懂的话,那你一定能理解,就是你这个Q。是在头部加的对吧,但是你它是整体下树了。啊,也不说整体下数了,就是这个Q并不是头部加的,它是被原来的A改了的,你不信的话,我们把这个B你看啊,把这个B变成丑八怪,丑八怪,丑八怪看见没有一点发现没有,这个B没有丑八怪了,就说明他是全新的,也不是全新的就是他改了。
28:00
啊,它里的文字被改了,它不是移下来的,它是改过来的,它是原来那个C改过来的,这是原来的AB,这是原来的C。因为他全都命中了,你都手写他的底层了,对吧,当你把他的底层手写出来的时候,那你是一定一定。那你是一定一定彻底懂它内部机制了,所以key是很重要的。对吧,那咱们现在把K加上,你看只要我们把K加上,那么这个时候。啊,把K加上。好,然后把这个K也在这加上。拉下来粘贴对吧,我们把K加上,那这个时候不一样,这个时候这个诶。是在上边。出bug了啊,出bug了abcde1.a怎么回事?QABCDE对吧,这是AB,哎哟,到最后最后快完了,咱们出了个bug,大家发现了吗?你这个Q在前头命中,他有点问题,看见了吗?这个Q啊,但是不管怎么样,我们先去试一试这个B。
29:00
哎,丑八怪。啊,你看对吧,这个B它是不改变的。发现了吗?就说明他是真的这个呃,维持了原状,没有去改,但是这个Q现在他确实有问题,完掉了,哎,最后剩余看一看啊。到最后出现bug应该是这个,因为都能命中对吧,你看你现在手动看一下这个AAA不能命中,但是尾尾能命中对吧,等于说他们都是疯狂的二号命中看见没有对吧?都二号命中等于二号命中,能把他们都遍历完变列完之后上了个Q,那这个Q等于说插入是有问题的。插入这里是有问题的啊,就这里。啊,这里这个插入这块,你看到最后还发现个问题,这个笔可能有错了。哎,这个笔before可能是有问题了,我们看一下这个笔before啊,Log一下。舒心输出,这比分是安迪判的。啊,Before是个安迪范的,是这个吗?
30:00
哎,比before果然是个安迪范的,所以这块有问题了啊,安de范的,如果是安范的是不是应该就是零啊。就是给他第零项插入好咱们,哎呀,刚才老师暂停了一下视频啊,把这个bug找了找这个错误,他现在是变成QABCDE啊,那这个Q呢,咱们现在它是出bug了啊,但是老师又调好了,我给撤销一下,给大家看一下。哎,有有就咱们刚才是这么写的啊。哎,这么写的abcde这个Q跑到后边去了啊,那实际上这个before呢,这块的话呢,它是这个,呃,拿圆库是这么写的啊,说是在这个new n ids加一,但是呢,咱们由于是阉割版的,就这个代码是没错的。啊,这个代码是没错的,就是我如果最后比较啊,比较出呃,比如说这块多了一个,最后多了一个de吧,就相当于一个Q对吧,但是呢。他确实是,因为它是要以新前新后的指针来进行比,这是最合理的。
31:01
啊,这是插入的标杆,但是我们现在呢,这个值是安迪范,就是我现在把这个新的这个啊new ch给大家印出来,大家看一下这个指针是安迪范。看见了吗?Elm是MD。啊,这就是bug,所以这个elm如果是安迪范的话呢,那现在的话,它这个before是不是就是安迪范呀,所以他就在安迪范的时候,安迪范它就相当于最后了。啊,所以说这个笔before这个标杆问为什么会出现这个问题,因为我们现在新的这个节点啊,新的节点上呢,是没有elm这个参数的,我们不是阉割版的吗?上面是没有这些逻辑的,所以这个比before这句话实际上写的,咱们不能原完全按照这个圆库去写。啊,所以这个标杆是谁呀,所以这个时候咱们就直接就去写了,这是要看看有没有剩余的对吧?哎,那我现在就要便利新的。啊便利新的,诶新的这个呃,这个new new的这个呃C对吧,哎,然后我们要去添加到对老的啊没有处理的这个之前就行了,所以这个before其实就是O的CH。
32:12
明白吗?就是O的CH当中的D项之前就可以了啊,不是D是O的star的IDX之前就行了,那这样的话,你看这个Q它就能插入进去了啊的em。哎,这样子的这个Q都插入进去了。好吧,哎,这个bug就解决了,如果说再多来几项,比如说QT,然后这块再来个Z。啊,它是没有问题的,对吧,QT这块有个Z,并且他真的是最小量更新,比如说你这个DD给他来一个叫丑八怪对吧?哎,然后一点你看它是不变的,就说明这个D呢,是没有经过下述和上树的。好吧,哎,所以刚才呢,咱们是这块有一个语句写的是,呃,写的是欠考虑对吧,哎,所以这条语句呢,现在是被替换了啊,就插入到老节点之前嘛,所以这句话更是。
33:02
说人话的对吧?哎,这句话更是说人话的啊,它实际上就是相当于我们要把这个节点啊,就是你剩余的节点对吧?哎,都要插到old的star ix之前啊,要把所有。剩余的节点啊,都要插入到O的start I DX之前嘛,这样子的。对吧,哎,就OK了啊。行,那咱们今天的这个啊,就结束了啊,今天的这个就OK就结束了啊,这个今天的这最小更新呢,就彻底写完了啊,那么希望同学们能真正的自己把它真正能写出来啊。
我来说两句