双向链表删除元素操作

说起删除,说复杂吧,也不复杂,主要是理解思路,就变得非常简单
来看看如何删除的,删除的思路是如何扭曲你的大脑的?
删除的思路:
删除的权限判断:pos>=1 pos == list.size;
参数: list,pos
判断 pos> list.size;
用c++ cerr 输出错误信息 pos 过于大
返回
定义一个用来找到pos的位置的结点
取名为deleteNode; 当前结点
一套循环 i 根据i来判断 pos
current=current->next/找到下一个结点
当i==pos 退出循环

判断pos 用c++ cerr 输出错误信息 pos 过于小
返回

此时找到了删除的结点的
将删除的结点传入到unLink函数中
释放 deleteNode
–list.size;
调用完毕

删除第pos个结点元素

删除前

删除前

找到待删除的结点

双向链表删除元素操作_第1张图片

双向链表删除元素操作_第2张图片

双向链表删除元素操作_第3张图片

调用unLink函数

在这里插入图片描述

在这里插入图片描述

unLink函数 调用完毕

双向链表删除元素操作_第4张图片

释放结点

双向链表删除元素操作_第5张图片

释放结点后

双向链表删除元素操作_第6张图片

更新链表个数

双向链表删除元素操作_第7张图片

删除元素完成

在这里插入图片描述

链表删除操作

void LinkListDelere(LinkList& list, int pos) {

	int i = 0;
	if (pos > (int&)list.size) {
		cerr << "pos 过于大" << endl;
		return;
	}

	LinkNode* DeleteNode = list.list;
	while (i < pos) {
		DeleteNode = DeleteNode->next;
		++i;
	}

	if (pos <= 0) {
		cerr << "pos 过于小" << endl;
		return;
	}
	unLink(DeleteNode);

	delete DeleteNode;
	DeleteNode = nullptr;

	--list.size;

}

你可能感兴趣的:(小森数据结构算法技术总结,链表,c++,算法,后端,数据结构)