00:00
好,同学们看一下啊,就是刚才我们整个讲的呢,就是什么呢,是一个单向链表代码,我们也实现了,就是这样子的,对吧,是这样子,包括我们的这两种方法,我们都给大家。做了一个这个这个说明啊,这个说明,然后呢,现在有一个问题,单项列表有一个什么问题呢,我们来分析一下。使用带害的头的双向链表也来实现水浒英雄排行榜的来管理,来管理它就是双向链表来管理,为什么呢?因为我们知道单向列表有一个缺点。它的什么呢?单向链表查找的方向只能是一个方向。而双向链表可以向前或向后查找。这是第一个它的优势,也就是说如果是双向链表,它长的样子,首先我们来画一个。他长的样子就这样子的了。
01:00
还是把这个拿过来。它双向链表长的样子,我们先把它概念说一说。那也就是说将来会形成这么一个结构。就是你这个后面这个节点呢,还可以指向前面的。OK,同样。同样。它可以形成这么一个结构。诶,稍等一下。那如果是这个就是一个双向链表,就是它可以有前,它可以指向前面,也可以指向后面,这就是双向的。双向链表。那这个双向链表它的优点我们来看一下,第一个我可以从我可以按这个方向走。我可以按照这个方向来玩一把。来进行便利,对不对,可以的,那我也可以,怎么样呢?我也可以反过来从这个方向往这边走,假如你做的更好的话,你也可以在这个地方再加一个头。
02:01
就是我两边都有头。那这样就很很方便了,而且实际上在数据结构里面还真有这些东西,而是为了你们如果看Java的源代码。他在进行这个检索的时候,有时候他为了这个从后往前走,他直接在这也它的底层也有一个头。他自己找到,他把这个图找到,就是后面这个图尾尾尾节点,然后直接往后面变离也是可以的。那效率就会很高,这是第一个优势,第二个优势,大家看我这还整的一个说法,注意听啊。还有一个什么好处呢?双线列表还有一个好处就是单向链表不能自我删除。但是到他不能自已伤自己。所以他一定找到一个点,他就没办法弄了,需要靠辅助节点,而双向链表呢,可以实现自我删除,所以前面单向列表的节点是我们,我们为什么总是找到temp步的下一个节点来删除呢?就是刚才我讲的这个道理,但如果说我们是双向链表,你看我就可以解决自我删除的问题,比如说我现在要删除宋江这个编号,我就找他。
03:11
我就找他,比如这个就是我要删除的,那你看如果我要删除它是不是很简单,我只需要让这个前区这个节点指向它的后面,然后让这个它后面这个节点。指向这个。哎,这个线有点看不清楚。是吧,我让我让这个地方,我我我哎这这条线是画错了是吧。诶,这条线怎么跑哪去了?哦,这条线颜色不对啊,你看这样子我就可以了,我让这个如果我要删除它,因为它是可以访问到前前区节点的,它前面这个节点,那我反过来让它的next指向它的后一个节点,然后呢,让它去访问后一个点,它后一个节点的前驱点在指向。这个节点好,这个问题也能解决。
04:02
啊,而且确实在很多这个底层代码里面呢,它就是这么去实现的。双线列表好,那这样子至少大家知道双线列表确实还是有它的一些优势就可以了,那现在呢,我们就来。4100倍。好吧,我们就来实现一把,那可能我们只能实现到一部分啊一部分,好,我们先把这个呃,双向链表的这个说法来给大家先整理一下。好,我们这个就不要了,那刚才讲的是双向链表的一个基本介绍。哦,同学们。双向链表。诶,这个地方写成三吧,因为它都属于链表的部分。那首先呢,我把刚才这这个说法给大家拿过来,对吧。啊,管理他的一个缺优缺点的说明,我们整理一下。啊,第一个单线列表的,它的缺点是这样子的。
05:04
一。我把这个整理一下。这是它的第二个。啊,单线裂变第二个缺点。然后呢,这画了一个示意图,这个示意图呢,就是刚才老师在这画的一个示意图。这是我们双向链表的一个示意图。我只写一个带头节点的双向链表的示意图,大家一看也就清楚了,对吧?好,下面呢,我们就把刚才的那个单向链表改成双向链表就可以了,下面呢,我们来啊实现一个这样的功能,就是第四一步。就是将。将前面的这个单向链表。单向链表改成改成这个双向链表。好,双向列表,好,这是我们对呃双向列表的一个基本说明。
我来说两句