struct doubleList
{
int val;
doubleList * left;
doubleList * right;
doubleList(int num) : val(num), left(nullptr), right(nullptr) {}
};
//1.实现双向链表, 在节点P后插入一种节点
bool insertNode(doubleList * p, int num)
{
doubleList * node = new doubleList(num);
doubleList * next = p->right;//保存插入节点的下一个节点
p->right = node;//改变插入节点 p 的 的 right 指向
node->left = p;//改变新插入节点的指向
node->right = next;
if (next != nullptr)
{
next->left = node;//改变插入节点的下一个节点的 left 指向
}
return true;
}
//1.实现双向链表, 删除一种节点P
bool deleteList(doubleList * head, doubleList * p)
{
if (p->right != nullptr)//如果 p 不是尾节点
{
doubleList * pLeft = p->left;//保存 p 的上一个节点
pLeft->right = p->right;//改变 p 前后节点的指向
p->right->left = pLeft;
p->right = nullptr;//改变 p 的指向
p->left = nullptr;
delete p;//删除 p
p = nullptr;
}
else if (head == p)//如果 p 是头结点
{
head = head->right;
head->left = nullptr;
delete p;
p = nullptr;
}
else//如果 p 是尾结点
{
p->left->right = nullptr;
p->left = nullptr;
delete p;
p = nullptr;
}
return true;
}
双向链表的插入与删除
最新推荐文章于 2024-08-29 20:55:33 发布