温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
同学们大家好,今天我们来聊第12道面试题,这道面试题呢是这样啊,就是谈我们怎么去给双向链表插入新节点,那么一般我们在面聊这个数组跟链表的差别的时候呢,我们通翅说啊,这个网链表插入一些节点,那么速度会更快啊,因为我们只需要改变前后的指向就行了。但是呢,当我们去问细节的时候,我们说呢,具体这个前后指向怎么改的啊,待会怎么写呢?好这个时候的话呢,很多人可能会写错啊,那好下面大家跟着我来看一下,来我们切换到这边来啊好大家可以看到这道题是这道题刚刚我们经说了啊,那接下来我们来看怎么通过代码的方式来描述一下呢?呃,首先啊,我们先来说一下这里面啊假设啊,我们现在先定位到有一个A节点。然后呢,那么是意味着现在假设我们需要的AB2个节点之间呢,插入C节点啊,那好,我现在把这个现状啊描述一下,大家跟着我来看一眼啊。好,注意看这里面。
01:01
今天这个这个这个录屏软件呢,升级之后发一堆的bug啊,早知道就不升级了,OK,我们来看一下,来看这边啊好。看这里面啊,这里面的话呢,是这样。那假设呢,这个呢是A节点好,然后呢,这个呢是B节点,那么我们知道呢,一个节点呢分三块,一块呢是它的前置指针也是这里前置啊,我们写一下啊。好这一块呢,是它的后置啊,就nest中间呢,是它的数据对不对啊,那同理呢,这边也会有前置啊,也会有后置。好,那现在的道理呢,是这样的,现在就是说我们这个A节点的next指向了B,然后呢,B点的前置呢,指向了A,对吧,整体来说呢,就是这么一个关系,好然后我现在需要概念设,就是来有一个C节点,C节点的话呢,我们依然是分为三块啊,前置后置还有数据,那么我们也给他写上。这个是前置。
02:02
这个呢是后置好,然后呢,在这里面的话呢,这个是C节点,那此刻我怎么把它将它放到中间呢?很简单,注意一个点是注意一个非常关键的点啊,就是此刻我们不能让这个A节点啊,不能让这个A节点和B节点联系先断开,因为这样的话呢,我们一会就找不到这个B节点了,我们假我们只找到了这个前提啊,前提就是假设我们只定位到了A节点,对吧?好,那注意跟着我来看一下啊,首先是这样的,首先大家可以注意看我们下面呢,换一个别的颜色的线,这样区分一下。这边我们用那个蓝色的线吧。好看一眼啊,首先C的前置指向A,意味着这牵一根线,C的前指向A,这是第一步,然后的话呢,C的N指向A的nest,那此刻A的nest是B是不是?所以相当是在这边再牵移一根线指向B,没问题吧,好,这是前两步啊,那好了,接下来这个线还在对不对?那下一步的话呢,A的nest的nest,这个A的nest是不是B啊,那B的前置指向C好了,注意这个地方就稍微有一个地方变了,就把这条线段给断了,因为A的nest是B,然后B的前置呢指向了C,所以意味着呢,这个地方它不再指向了我们BA了啊,所以就相当牵了这么一个线过来。
03:13
对不对,指向了我们C节点啊,指向C节点。好,然后最后一个呢,是A的nest指向了C,因为这个时候这个C和B已经建立好联系了,所以在接下来一步呢,这段就可以掐断,我就会让A的nest指向了C。看意思吧,诶你看这样的话,这个C节点是不是就已经切进来了,所以这里面咱们可以看到啊,就分为几个步骤,我们看一下这是第一步骤是吧?啊第一个步骤第二,然后呢,这个是第三啊,这个是第四,好,那这样的话就完成了这个什么这个节点的一个进入,OK。好,这就是我们如何在双向链表插入一个新的节点啊,你学会了吗?啊,或者你可能有更好的方式,好了啊,那如果感觉好的话,大家点个赞,咱们下次再见啊。
我来说两句