1、删除某个节点
//首先使得指针p指到所要删除元素的位置
PNODE findPos(PNODE pHead, int pos){
int i = 1; //计数器
PNODE p = pHead->pNext;
while (NULL !=p && i < pos) //pos:所需处理节点的位置
{
p = p->pNext;
++i;
}
if (i > pos || NULL == p)
return p;
}
return p;
}
//进行双向链表的删除操作
void deleteNode(PNODE pHead, int pos, int * pVal){
PNODE p = findPos(pHead, pos);//此时p已指向所需删除节点的位置
*pVal = p->data;//传回所需删除节点的值
p->prior->next = p->next;
p->next->prior = p->prior;
free(p);
}
2、插入某个节点
//首先使得指针p指到所要插入元素的位置
PNODE findPos(PNODE pHead, int pos){
int i = 1; //计数器
PNODE p = pHead->pNext;
while (NULL !=p && i < pos) //pos:所需处理节点的位置
{
p = p->pNext;
++i;
}
if (i > pos || NULL == p)
return p;
}
return p;
}
//进行双向链表的插入节点操作
void insertNode(PNODE pHead, int pos, int val){
PNODE p = findPos(pHead, pos);//此时p已指向所需删除节点的位置
PNODE x= (PNODE)malloc(sizeof(NODE));
s->data = val;
s->prior = p->prior;
p->prior->next = s;
s->next = p;
p->prior = s;
}
总结:双向链表的删除以及插入操作的关键:使得指针p指向所要删除元素的位置,这一点与单链表的删除不谋而合。