概览:
已知p指针,那么a结点的地址就在p指针所指结点的prior里存着,
a结点要变成s的前驱,
所以要给s的Prior域赋值,赋的是a结点的地址,即p的prior。
接下来
将s结点变成a结点的后继,就要给a结点的next域赋值,赋的是新插入结点的地址,而他此时在s里存着
a结点的next域就是p的前驱结点的next,即p->prior->next=s;
接下来s还要作为b的前驱,则又需要修改两个指针
一个呢是b作为新结点的后继,就要修改s的next,他要指向指针变量p所指的这个结点的地址,所以给s的next赋值,赋值p:s->next=p;
最后,b的前驱应该是新结点s,他的前驱为p->prior,所以p->prior=s;
接下来是完整算法:
首先给我们一个双向链表L,即给了我们指向双向链表的头指针,插入了新结点之后仍然会用它返回,所以他前面带了&,引用型变量。在第i个位置上插入值为e的元素
让指针p指向第i个位置,他这里直接调用了找第i个位置的操作,这个操作由于和单链表当中的操作几乎一模一样,所以省了
即在链表L中找到第i个,找到后赋值给P,让p指向第i个结点
先找到一个新结点,用指针变量s指向它,然后给s的data域赋要插入的值
接下来是这4步,双链表修改了4个指针,而单链表只需修改2个