双向链表插入、删除操作
概念
单向链表中每个结点增加一个指向其前驱的指针域prior。这样形成的链表中就有两条方向不同的链,可称之为双(向)链表(DoubleLinked List)。
插入
第一步:首先找到插入位置,节点 s 将插入到节点 p 之前
第二步:将节点 s 的前驱指向节点 p 的前驱,即 s->prior = p->prior;
第三步:将节点 p 的前驱的后继指向节点 s 即 p->prior->next = s;
第四步:将节点 s 的后继指向节点 p 即 s->next = p;
第五步:将节点 p 的前驱指向节点 s 即 p->prior = s;
删除
第一步:找到即将被删除的节点 p
第二步:将 p 的前驱的后继指向 p 的后继,即 p->prior->next = p->next;
第三步:将 p 的后继的前驱指向 p 的前驱,即 p->next->prior = p->prior;
第四步:删除节点 p 即 delete p;
删除如果碰到尾删除怎么办?
在第三步时加个 p->next 是否为空的判断。
1 | 转载出处: <https://blog.csdn.net/lisayh/article/details/79216796> |
参考链接