00:00
这对吧,删除搞一下就行了,好,那么代码实现。代码实现制,那现在呢,我们打开Vs code,我们新建一个文件夹叫double link。Double double link就双向嘛,Double,而这地方我们新建一个文件叫main,点打起精神。好,那前面前面这个,呃,前面这个单线列表,虽然说嗯没有没有双向列表功能,但是它很像,所以说呢,这个写过的东西我就不反复的重写了啊,那工作量也太大了,我就直接把这个代码呢先付过来。把在上面做一个改进就可以了,大家看改进啊,那我们怎么改进呢。好把这先不要的,先把它拿掉。啊,先把它拿掉啊,这个添加这些呢,我们把它拿掉啊,这地方可以先先暂时保留一下,开始写了,首先我们看添加这一块,添加这一块。
01:00
我们看添加这一块,添加这一块呢,嗯,给这个链表添加一个阶段,我们也分两种情况,双线链表也可以分两种情况,就是往皮革后面加和在中间加的问题,只是看怎么连接,看这里。找到啊,我们就给双向链表。双向链表好,第一种方法,先找到屁股后边。先找到屁股后边。那一旦找到这个屁股后边咱们怎么做呢,这个事情。哎,比如说你原先这个high的节点是我现在找到了,找到的话相当于说你在这地方找到了,找到过后呢,你要做两件事情,第一个你先让这个temp的,就是你找到temp这个节点。的下一个节点指向它,再让我的前一个节点指向它,那就说明我这个节点要新增加一个字段。字段叫pre。你分析出来了吗?有个指向前一个节点,好心。
02:02
Hi hero no,那我写一下这个指向。指向前一个节点。因为你要是双向的,所以说要是向前一个节点。前一个节点好,那你实现前一个节点,那么我在这个地方,一旦找到了这个位置。好,我一旦找到这个位置,我就要做一件事情,做一件什么事情呢?我让next temp.next先指向新节点。同时我要让六。这个节点,hero.node这个节点。No,这个节点的前一个节点pre,然后指向衬步,好,这样子呢,大家看,只要你这么做了,你会发现它这个双向链表一定是形成了的,那么先把这个测试一下,这就改进一点点就完了,屁股后面如果在屁股后面增加就这么一点,那么看能不能用起来。看能不能用起来啊,我们先来做一个测试。
03:02
我们看测试的时候呢,肯定要显示啊,显示这个不用改,就是说显示链表的所有节点仍然是跟那个单项一样的,因为你想嘛,你你显示你还是从这开始一个个找把病历出来嘛,你你除非说老师我有个需求,我想继续打出来啊。你要逆穴打出来也可以,你先把你的这个跑龙套的先指到屁股后边,然后反向的走也好玩啊,老师我要逆穴,哎,突然感觉比以前简单好多。因为我现在呢,是从头点点开始打,我肯定只能是找下一个,找下一个找下一个,那你如果想逆旋打呢,怎么办呢?你先让这个跑龙套的指向害的啪啪啪啪先,现在这个跑龙的指到卢俊义,你怎么知道卢俊义是最后一个呢?因为他的next仍然是空,对吧,你看这个卢俊义他下一个节点没有,他只有指向前面一个节点,那这样子你这跑龙套在再往前面跑。跑到什么时候算完呢?跑到你的这个有一个节点的前一个节点等于害的节点的时候。
04:04
他就结束了,那这个刚好可以留给你们去玩啊,所以你们可以自己去玩一下。好,那我这个就还是按照它的这个打法,我就不改了,所以我写到这这个打印呢,和单单项链表保持一致啊,我这里我们不修改,这里仍然仍然使用单向的。使用使用啊。使用单向单向的这个链表啊,链表的那个显示方式。没问题。好,那这个我就不改了,这个我就不改了,然后呢,我们接着来看它的这个。添加添加已经有了啊,第一种方式有了,来玩一把。好,我们来玩一下,这个地方是有偷窃点,没问题,宋江,卢今叶,你报仇林冲,好,这边我们来开始走一走啊。三个我要加进去。好,我们现在呢,使用这个insert。这个是往屁股后面加的啊,就是直接往屁股后面加的是呃,没没有没有找有序那那个东西啊,Insert no insert hero。
05:10
Here no,来,先把头几点给我吧。然后呢,再把你的这个节点给我,好,我就按顺序来了。HERO1。好,HERO2HERO3依次来加组。因是加入,那么现在呢,我把它显示出来,显示的时候呢,仍然是用呃,这个遍历单列表的方式来显示的,这个没问题。看看有没有建立起来。找一个叫。呃,Hi,呃,叫hide把hide给他。把high的头给他。好,同学们看一下现在情况怎么样好,我CD点点CD的double link go run main点够好。好,我们发现了这个没有任何问题,好,及时语这个都可以的,可以没问题,但是老师你这个怎么证明你现在已经形成双向了呢。
06:05
有一个办法。有个办法就是我可以逆学打,那你说老师你把逆学打给我们写一下呗,也可以啊,其实按理说是想让你们来玩的啊,但是呢,既然大家有这个兴趣对不对,我也跟他们写一下。那么这个地方呢,就漏二那上下这个跑龙套的先让他走,但是这个你不要先跑了,你先把这个,你先让这个跑龙套啪啪啪走到屁股后边去,能理解意思吧,就我为了证明,我现在双线列表已经成立了,我必须这样证明,不然的话你怎么证明。我又不能把内存扒开给你看,我只能通过通过一个显示的效果给你看,所以说现在呢,我们逆须打出来就是怎么样呢,就是让这个temp只到定位到定位到哪里去,定位到最后。定位到这个链表的双向链表的啊,双向链表的什么呀,最后这个节点能理解。节点。好,这个最后结。
07:00
最后这个节点。怎怎么弄啊,For循环。波循环来。只要temp的下一个它temp next,只要它还不等于空,我就让它往下走,对不对?它等于空,我就相当于不走了。就退出。否则。否则我让这个temp不停的往后面走。直到他找,找到最后一个节点。好,这个一旦出来啊,出了这个for循环,大家知道temp补就相当于走到最后了,这个我就不要说好,那这个是因为它。他他先走到那,那这个地方就不能这样想了啊,要反向打。反向打的话呢,就是这样走了,判断判断什么时候便利结尾啊,哎,这个这个还是可以用的,就判断是不是空链表,这个是不是还还是通用的吧,是不是空链表这个还是通用的,所以说把这一段呢,给它剪辑到上面去,这个没问题啊,同学们就说判断是不是空链表还是一样的。
08:04
好这个就可以了,然后呢,便利它了,便利反向反向便利。先来,然后呢,先把这个家伙打出来啊,先把这个打出来,打出来过后呢。打出来的时候我就,诶对了,我现在是最后这个节点啊,我还不能够写前面,我还不能写前面,我就这么找同学们。因为你现在已经是最后这个节点了,所以说你先直接打出来的next note。那这门就不能不能这样玩了,哎,你的这样子。这样子。然后呢,把这个X去掉。打出temp这个节点,其实就最后节点,然后判断是不是到了表头了。就判断是不是到了这个链表的最那个链表的头头部头。他不是有个头吗?大家还记得吧?怎么样才能知道他是头了呢?怎么样才能知道他现在从这开始,这个temp现在是从这个位置开始找的,我们temp呢,现在从这开始走。
09:08
他先把自己打出来了,打出来过后挪动。挪动。哎,他如果再往这边走的话。它的PR是不是。那个为尼尔就就代表它它是到这个开的节点了,就它这个有一个耐pre那个节点它是为空的吗。是不是这个道理,所以说你在判断应该是如果什么呢?就是如这个他这个首先是往前面走一下。往前面走一下,然后temp点。就是它等于空,就代表不用再打了,好写完了代码。这个就写完了,说老师这样是行不行呢,看一下我们来两次打印,一个是逆序。这地方为什么错了,Break?他说期望一个表达式。
10:02
好,这个地方。28号一步,OKOK。好的一补一下,然后呢,我们现在顺着打一次,再继续打一次,看啊这个是顺着打的。这个顺着打的,再来来一次逆续打。看效果,看效果,为了好看呢,我们来换一行。这个呢叫做逆序打印。逆序。逆序打印能理解。打印哦了,来玩一把。走。回车。我们看逆序打印会不会死死死在里面啊哦,同学们可以看到顺序打印是123,逆序打印是321正确。完全没问题,你看一下就很轻松的实现一个逆学打印,如果你没有双线链表,你想想你容易吗?你根本就做不到。
11:02
可以说是几乎做不到说双线列表,不是说吃饱了没事干,做一个双线列表啊,它是有价值的,就大家现在能够感觉到一点,大家应该现在有种感觉,感觉到有点接近我们这个这个计算机了,但是还没接近,如果再往下面接近一点呢,就是编译原理和操作系统啊,但是我们不讲这些东西了啊,因为再讲这个就没有意义了,你们现在呢,把找到这个东西就可以对接你们后面学的区块链算法,就是如果说把这块基础数据结构基础学好了过后,后面老师讲这个区块链算法的时候,你理解的层次会稍微深一点点啊,深一点,因为是哦,原来他们下边还有这些东西在在这帮忙呢,对吧,不是无缘无故的整出来的,它是有东西在里面的,好,这个逆序就先说到这儿,那么我们现在接着说,把这个逆序先给大家讲到这儿啊,我们接着再讲一个。就是我们还没有讲什么呢,删除啊,我们讲个删除。好的。截取的视频。
我来说两句