双向链表的插入与删除

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值