
在双链表的插入操作,我们比较头疼的就是,明明选项看着答案都是比较的完整,但是为啥就是选不正确呢?问题可能出在你的顺序问题上。
双向链表的插入其实并不复杂,只是在原有单链表的基础上多了连接一个向前的指针而已。但是需要注意的是操作的顺序很重要,不可以写反了。

s->prior=p; //把p赋值给s的前驱
s->next=p->next;// 把p->next赋值给s的后继
p->next->prior=s;// 把s赋值给p->next的前驱
p->next=s; //把s赋值给p的后继
切记顺序不可以记错 在写代码的时候可以将操作步骤画出来,理清实施步骤的顺序。
总而言之就是,后插问题上,首先我们需要画出它的插入操作顺序图,第一步是将S的前驱链接在P之后,然后在P的后驱链接在P原来的后驱的前驱,第三步就是P原来的后驱的前驱等于S,P的后驱等于S

先后顺序,不能搞反了,总的来说就是为了原始的地址不会被遗漏,换言之在双链表的插入当中不能操作指针域的丢失,如果我们直接就是执行P->next=S,那么就会丢失P原来结点后的元素,所以说顺序是非常重要的
至于我们应该如何去记忆这种顺序呢?我总结了一个,当我们进行P后插的时候,一定要将P->next =S 最后一个执行,其他的顺序你可以自己变化,但是我推荐记住上面的


前插,我们需要注意的我们知道P的指针,这个时候P的prev是已经知道且固定的,并且我们在操作中需要用到的所以这个时候,我们就不能提前将P的prev改变编程q,换言之就是这一步应该是最后一步。
这也等价于前面在执行后插的时候,P的next是已知的,不能将P的next放在前面执行,需要放在最后执行。把握好这一原则,在双链表的插入操作当中,应该是比较清晰了。

上面的顺序,以及不可变的操作顺序,需要我们熟记于心,这样就可以对此类考点,游刃有余了
知识点的混淆总是让人彻夜难眠