void ddeletenode(dlistnode*p)
{
// p->pre->next:p的前一个节点的next指针
// p的前一个节点的next指针指向p的下一个节点
p–>prior–>next=p–>next;//将p节点从链表中脱离,也就是p的前驱的下一个指向p的下一个,将p跳过。
// p的下一个节点的pre指针指向p的前一个节点
p–>next–>prior=p–>prior;//让p的下一个的前驱指向p原来的前驱
p->pre=NULL;//
p->next=NULL;//为了程序的稳定性最好不要省略,这里是避免野指针的产生
free(p);//删除节点
}
注意:与单链表的插入和删除操作不同的是,在双链表中插入和删除必须同时修改两个方向上的指针。
上述两个算是法的时间复杂度均为O(1)